kable In this notebook we analyze the second “think/believe” task, in which participants completed a series of fill-in-the-blanks with free responses.

NAs introduced by coercion

Note: There are some subjective calls here, and translation issues. For now, I’ve used a combination of automatic “lemmatization” and hand-coding to do my best to code whether responses should count as “believe” (e.g., including obvious cases like “believes” and “believed”; including Bislama “belif” and “bilif” and other spellings).

As of 2020-01-22, I have two versions of these variables – one that only includes responses that are strictly “believe” and one that also includes cases that involve the word “believe” (e.g., “firmly believes,” “does not believe”) – and likewise for think. The looser interpretations are called believeX (or “belief*”) and thinkX (or “think*”).

Overview

From the preregistration (link):

“Our overarching hypothesis for the present study is that […] other languages will have an epistemic verb that is more likely to be used for religious attitude reports (similar to English “believe”) and a different epistemic verb that is more likely to be used for matter-of-fact attitude reports (similar to English “think”).

For this study, we are examining five languages in five regions of interest: (i) Mandarin in China; (ii) Thai in Thailand; (iii) Bislama (an English-based creole language) on the Melanesian Island of Vanuatu; (iv) Fante in Ghana; and (v) American English in the Bay Area, California.

We thus have five more specific sub-hypotheses. For each of the first four languages / regions of interest, we hypothesize that a set of words or phrases exists whose usage parallels the difference between usage of “think” and “believe” in American English, with one word or phrase (the “think” analogue) being used for more matter-of-fact attitude reports and the other (the “believe” analogue) being more likely to be used for religious attitude reports. That gives us our first four sub-hypotheses: that Mandarin, Thai, Bislama and Fante speakers will each use two different words in a manner parallel to the use of “think” and “believe” in an American English setting as identified by Heiphetz, Landers, and Van Leeuwen. Our fifth sub-hypothesis is that the Bay Area portion of the study will replicate the results of the earlier study of Heiphetz, Landers, and Van Leeuwen."

KW EXECUTIVE SUMMARY (2020-01-20): We replicated the original finding in the US (and the findings of Think Believe 1): participants were more likely to write in “believe” for religious than fact questions. We found the same pattern in all five countries/langauges included in this study.

As in Think Believe 1, the pattern was somewhat weaker in Ghana/Fante than in other countries/languages. In Think Believe 1, the pattern was stronger in Thailand/Thai (and no stronger or weaker in China/Mandarin or Vanuatu/Bislama); in contrast, in this study it was stronger in China/Mandarin, weaker in Vanuatu/Bislama, and no stronger or weaker Thailand/Thai. I suspect these patterns are largely accounted for by the fact that so few participants in Ghana and especially Vanuatu spontaneously used the word “believe” in their free responses.

Samples

Before we begin, it’s important to note that we had unequal sample sizes by country:

However, 39 participants completed this task after completing other surveys, and an additional 31 failed the attention check. In the following analyses I will exclude these participants, leaving us with the following samples:

Plots

We’ll begin by plotting responses of “think(s)/thought” (red) vs. “believe(s)/believed” (turquoise) vs. other responses (gray) to get an overall sense of any patterns in the data.

By superordinate category

By category

By question

Analysis: KW without looking at preregistration

These analyses directly parallel the way I analyzed the Think Believe 1 data before looking at the preregistration. Again, I think these analyses are valuable because they’re a little more efficient than the preregistered analyses – no need for follow-up tests – and they directly test the question of whether the effect of interest varies across countries/langauges.

As of 2020-01-22, I’m now using the more lenient “believe*” variable in these analyses.

Technical note: Unless specified otherwise, all of these analyses use “effect coding” for categorical variables (e.g., country, category of question) – meaning that each country/langauge is compared to the “grand mean” collapsing across all countries/languages. Because of degrees of freedom issues, each analysis only compares 4 of the 5 countries to the grand mean – by default, I’ve left out the comparison of the US/English to the grand mean, but stats for that comparison could easily be calculated (if we left out another country/language instead). This is just to say that you won’t see statements like “The effect was exaggerated in the US relative to other countries,” although they might be true.

KW Analysis #1

First, I used a mixed effects logistic regression predicting how likely a participant was to write “believe” based on the superordinate category of the question (“religious” questions or “fact” questions), the country they were in/language they were using (US/English, Ghana/Fante, Thailand/Thai, China/Mandarin, or Vanuatu/Bislama), and an interaction between them, with a maximal random effects structure (random interpcepts and slopes by subject, and random intercepts by question). This analysis gives me a sense of (1) Whether participants were more likely to write “believe” for religious questions than fact questions, and whether this tendency varied by country/language, controlling for the fact that the overall rates of circling “believe” might vary by country/language (and accounting for individual differences and differences across individual questions).

Note that this analysis treats responses of “think” as the same as any other non-“believe” response – I’m just trying to predict how likey the participant was to write in “believe.”

r2.1 <- lmer(believeX ~ super_cat * country 
             + (1 + super_cat | thb2_subj) + (1 | question), 
             # + (1 + super_cat || thb2_subj) + (1 | question), 
             # + (1 + super_cat | thb2_subj), 
             # + (1 + super_cat || thb2_subj), 
             # + (1 | thb2_subj) + (1 | question), 
             data = d2_long)
funs() is soft deprecated as of dplyr 0.8.0
Please use a list of either functions or lambdas: 

  # Simple named list: 
  list(mean = mean, median = median)

  # Auto named with `tibble::lst()`: 
  tibble::lst(mean, median)

  # Using lambdas
  list(~ mean(., trim = .2), ~ median(., na.rm = TRUE))
This warning is displayed once per session.
Parameter β β' β'' Std. Err. df t p
Intercept 0.19 - - 0.01 55.49 13.80 <0.001 ***
Category (religious) 0.13 0.35 0.35 0.01 40.79 10.58 <0.001 ***
Country (Gh.) -0.09 -0.14 -0.14 0.02 383.00 -4.57 <0.001 ***
Country (Th.) 0.01 0.01 0.01 0.02 383.00 0.55 0.584
Country (Ch.) 0.03 0.05 0.05 0.02 383.00 1.80 0.073
Country (Vt.) -0.03 -0.06 -0.06 0.02 383.00 -2.03 0.043 *
Category (religious) × Country (Gh.) -0.07 -0.11 -0.11 0.02 383.01 -4.53 <0.001 ***
Category (religious) × Country (Th.) 0.01 0.01 0.01 0.01 383.01 0.61 0.541
Category (religious) × Country (Ch.) 0.04 0.07 0.07 0.01 383.01 3.24 0.001 **
Category (religious) × Country (Vt.) -0.04 -0.07 -0.07 0.01 383.01 -3.05 0.002 **

The effects of primary interest are in bold:

  • Category (religious): Collapsing across countries/languages, participants were indeed more likely to say “believe” for “religious” questions, echoing the forced choice results of Think Believe 1.
  • Country (Gh.): Participants in Ghana were generally less likely than other participants to say “believe,” collapsing across question categories. (This is in contrast to Think Believe 1, in which they were more likely to circle “believe.”)
  • Country (Th.): Participants in Thailand were no more or less likely than other participants to say “believe,” collapsing across question categories. (This is in contrast to Think Believe 1, in which they were less likely to circle “believe.”)
  • Country (Ch.): Participants in China were no more or less likely than other participants to say “believe,” caollapsing across question categories. (They did not differ from the grand mean in Think Believe 1.)
  • Country (Vt.): Participants in Vanuatu were no more or less likely than other participants to say “believe,” collapsing across question categories. (They did not differ from the grand mean in Think Believe 1.)
  • Category (religious) x Country (Gh.): The difference in rates of “believe” responses between question categories was smaller in Ghana than in other countries, echoing the forced choice results of Think Believe 1.
  • Category (religious) x Country (Th.): The difference in rates of “believe” responses between question categories was no smaller or larger in Thailand than in other countries. (In Think Believe 1, the difference was exaggerated in Thailand.)
  • Category (religious) x Country (Ch.): The difference in rates of “believe” responses between question categories was larger in China than in other countries. (In Think Believe 1, this difference did not differ from the difference in other countries.)
  • Category (religious) x Country (Vt.): The difference in rates of “believe” responses between question categories was smaller in Vanuatu than in other countries. (In Think Believe 1, this difference did not differ from the difference in other countries.)

Take-away: The predicted effect is evident in this dataset, as it was in Think Believe 1. It appears to be exaggerated in China and diminished in Ghana and Vanuatu, a pattern which differs from Think Believe 1.

KW Analyses #1a-1e (by country)

Next, I did this same analysis within each country/langauge alone (using the most maximal random effect structure that converged across all countries/languages).

# note: using most maximal common random effects structure
r2.1_us <- lmer(believeX ~ super_cat + 
                  # (1 + super_cat | thb2_subj) + (1 | question),
                  # (1 + super_cat || thb2_subj) + (1 | question),
                  # (1 | thb2_subj) + (1 | question),
                  (1 + super_cat | thb2_subj),
                  # (1 + super_cat || thb2_subj),
                  # (1 | thb2_subj),
                data = d2_long %>% filter(country == "US"))

r2.1_gh <- lmer(believeX ~ super_cat + 
                  # (1 + super_cat | thb2_subj) + (1 | question),
                  # (1 + super_cat || thb2_subj) + (1 | question),
                  # (1 | thb2_subj) + (1 | question),
                  (1 + super_cat | thb2_subj),
                  # (1 + super_cat || thb2_subj), 
                  # (1 | thb2_subj),
                data = d2_long %>% filter(country == "Ghana"))

r2.1_th <- lmer(believeX ~ super_cat + 
                  # (1 + super_cat | thb2_subj) + (1 | question), # failed to converge
                  # (1 + super_cat || thb2_subj) + (1 | question), # failed to converge
                  (1 | thb2_subj) + (1 | question),
                  # (1 + super_cat | thb2_subj),
                  # (1 + super_cat || thb2_subj), 
                  # (1 | thb2_subj),
                data = d2_long %>% filter(country == "Thailand"))

r2.1_ch <- lmer(believeX ~ super_cat + 
                  # (1 + super_cat | thb2_subj) + (1 | question),
                  # (1 + super_cat || thb2_subj) + (1 | question),
                  # (1 | thb2_subj) + (1 | question), # failed to converge
                  (1 + super_cat | thb2_subj),
                  # (1 + super_cat || thb2_subj), 
                  # (1 | thb2_subj),
                data = d2_long %>% filter(country == "China"))

r2.1_vt <- lmer(believeX ~ super_cat + 
                  # (1 + super_cat | thb2_subj) + (1 | question),
                  # (1 + super_cat || thb2_subj) + (1 | question),
                  # (1 | thb2_subj) + (1 | question),
                  (1 + super_cat | thb2_subj),
                  # (1 + super_cat || thb2_subj), 
                  # (1 | thb2_subj),
                data = d2_long %>% filter(country == "Vanuatu"))
Country Parameter β Std. Err. df t p
US Intercept 0.28 0.02 69.98 13.90 <0.001 ***
Category (religious) 0.20 0.02 70.00 11.48 <0.001 ***
Ghana Intercept 0.09 0.02 44.99 4.20 <0.001 ***
Category (religious) 0.06 0.01 45.00 4.06 <0.001 ***
Thailand Intercept 0.19 0.02 78.96 9.90 <0.001 ***
Category (religious) 0.14 0.01 23.00 10.83 <0.001 ***
China Intercept 0.21 0.02 99.86 14.03 <0.001 ***
Category (religious) 0.17 0.01 100.73 12.32 <0.001 ***
Vanuatu Intercept 0.15 0.02 71.98 8.16 <0.001 ***
Category (religious) 0.09 0.01 72.00 6.83 <0.001 ***

The effects of primary interest are in bold, and the take-away is clear: In every country/language, participants were more likely to say “believe” in “religious” questions than in “fact” questions.

KW Analysis #2

In this analysis, I treated country/language as a random rather than fixed effect (with participants nested within countries).

r2.2 <- lmer(believeX ~ super_cat 
             # + (1 + super_cat | country/thb2_subj) + (1 | question), # failed to converge
             # + (1 + super_cat || country/thb2_subj) + (1 | question), # failed to converge
             # + (1 + super_cat | country/thb2_subj), # failed to converge
             # + (1 + super_cat || country/thb2_subj), # failed to converge
             # + (1 | country/thb2_subj) + (1 | question), # failed to converge
             + (1 | country/thb2_subj), 
             data = d2_long)
Parameter β Std. Err. df t p
Intercept 0.19 0.03 3.83 7.34 0.002 **
Category (religious) 0.14 0.00 9311.02 42.15 <0.001 ***

The effect still holds.

KW Analysis #3

Finally, I ran a version of this first model looking at 5 categories of questions (rather than 2 superordinate categories): Christian religious, Buddhist religious, well-known fact, esoteric fact, and personal fact. I compared these categories using planned orthogonal contrasts.

r2.3 <- lmer(believeX ~ category * country 
             + (1 + category | thb2_subj) + (1 | question), 
             # + (1 + category || thb2_subj) + (1 | question),
             # + (1 + category | thb2_subj), 
             # + (1 + category || thb2_subj), 
             # + (1 | thb2_subj) + (1 | question),
             data = d2_long)
Parameter β Std. Err. df t p
Intercept
Intercept 0.16 0.01 53.95 14.60 <0.001 ***
Category comparisons
Category (Religious vs. fact) 0.05 0.00 44.39 12.41 <0.001 ***
Category (Christian vs. Buddhist religious) 0.05 0.01 25.53 3.18 0.004 **
Category (well-known & esoteric vs. personal fact) 0.01 0.01 20.68 1.78 0.090
Category (well-known vs. esoteric fact) 0.01 0.01 20.50 0.55 0.588
Country comparisons
Country (Gh.) -0.08 0.02 382.94 -4.45 <0.001 ***
Country (Th.) 0.01 0.01 382.94 0.52 0.603
Country (Ch.) 0.02 0.01 382.94 1.48 0.140
Country (Vt.) -0.03 0.01 382.94 -1.79 0.074
Interactions: Ghana
Category (Religious vs. fact) × Country (Gh.) -0.03 0.01 384.54 -4.62 <0.001 ***
Category (Christian vs. Buddhist religious) × Country (Gh.) -0.02 0.02 382.99 -1.21 0.227
Category (well-known & esoteric vs. personal fact) × Country (Gh.) 0.00 0.01 3216.39 -0.44 0.657
Category (well-known vs. esoteric fact) × Country (Gh.) 0.00 0.01 7596.51 -0.08 0.938
Interactions: Thailand
Category (Religious vs. fact) × Country (Th.) 0.00 0.00 384.54 0.62 0.533
Category (Christian vs. Buddhist religious) × Country (Th.) -0.03 0.01 382.99 -2.61 0.009 **
Category (well-known & esoteric vs. personal fact) × Country (Th.) 0.00 0.00 3216.39 -0.93 0.353
Category (well-known vs. esoteric fact) × Country (Th.) 0.00 0.01 7596.51 0.21 0.834
Interactions: China
Category (Religious vs. fact) × Country (Ch.) 0.02 0.00 384.54 3.31 0.001 **
Category (Christian vs. Buddhist religious) × Country (Ch.) 0.02 0.01 382.99 1.94 0.053
Category (well-known & esoteric vs. personal fact) × Country (Ch.) 0.00 0.00 3216.39 -0.17 0.867
Category (well-known vs. esoteric fact) × Country (Ch.) 0.01 0.01 7596.51 0.66 0.508
Interactions: Vanuatu
Category (Religious vs. fact) × Country (Vt.) -0.02 0.01 384.54 -3.11 0.002 **
Category (Christian vs. Buddhist religious) × Country (Vt.) 0.03 0.01 382.99 2.29 0.023 *
Category (well-known & esoteric vs. personal fact) × Country (Vt.) 0.00 0.01 3216.39 0.80 0.425
Category (well-known vs. esoteric fact) × Country (Vt.) 0.00 0.01 7596.52 -0.20 0.839

The first orthogonal contrast compared the two “religious” categories to the three “fact” categories (“Category (Religoius vs. fact)”). This parallels the previous analyses, and the results are similar: Overall, participants were more likely to write “believe” for religious questions than fact questions, and this tendency was diminished in Ghana and Vanuatu, and exaggerated in China.

The second orthogonal contrast compared Christian to Buddhist “religious” questions. Overall, participants were more likely to write “believe” for Christian questions, and this tendency was exaggerated in Vanuatu and diminished in Thailand (partially echoing Think Believe 1).

The third orthogonal contrast compared well-known and esoteric facts, on the one hand, to personal facts, on the other. Overall, there was no reliable difference in rates of “believe” between these groups of questions (in contrast to Think Believe 1, in which participants were more likely to circle “believe” for well-known and esoteric facts). This difference did not vary by country.

The fourth orthogonal contrast compared well-known to esoteric facts. Overall, there was no reliable difference in rates of “believe” between these groups of questions (in contrast to Think Believe 1, in which participants were more likely to circle “believe” for well-known facts). This difference did not vary by country.

Note that these findings statistically control for differences across samples in the overall rate of writing “believe” (which was generally lower in Ghana).

Analysis: Based on preregistration

From preregistration:

“Survey 1: We will conduct a 5 (Site: China vs. Thailand vs. Vanuatu vs. Ghana vs. United States) x 2 (Statement Type: religion vs. fact) mixed ANOVA with repeated measures on the second factor and the proportion of trials on which participants completed sentences using a form the word “believe” (or its respective translation) as the dependent measure. To look for finer-grained differences between different religious and factual statements, we will also conduct a 5 (Site: China vs. Thailand vs. Vanuatu vs. Ghana vs. United States) x 5 (Statement Type: Buddhist religious statements vs. Christian religious statements vs. life facts vs. well-known facts vs. esoteric facts) mixed ANOVA with repeated measures on the second factor and the proportion of trials on which participants completed sentences using a form of the word “believe” (or its respective translation) as the dependent measure. In all cases where omnibus ANOVAs are significant, we will conduct pairwise analyses comparing each statement type with each other statement type and each site with each other site."

d2_anova <- d2_long %>%
  distinct(thb2_subj, country, super_cat, question, believeX) %>%
  group_by(thb2_subj, country, super_cat) %>%
  summarise(prop_believeX = mean(believeX)) %>%
  ungroup() %>%
  mutate(thb2_subj = factor(thb2_subj))

contrasts(d2_anova$country) <- contrast_country
contrasts(d2_anova$super_cat) <- contrast_super_cat

Prereg Analysis #1

Here is the first preregistered analyis: a 5 (country) x 2 (question category) mixed ANOVA with repeated measures on the second factor and the proportion of trials on which participants wrote “berlieve” as the DV.

r2.4 <- d2_anova %>%
  anova_test(dv = prop_believeX, 
             wid = thb2_subj, 
             between = country, 
             within = super_cat)

get_anova_table(r2.4)
ANOVA Table (type III tests)

             Effect DFn DFd       F        p p<.05   ges
1           country   4 383  10.868 2.35e-08     * 0.065
2         super_cat   1 383 359.606 5.00e-57     * 0.268
3 country:super_cat   4 383  12.586 1.25e-09     * 0.049

This analysis aligns with the regressions above and with Think Believe 1, suggesting that participants’ tendency to write “believe” varied by country/language (country) and by question category (super_cat), and the difference between question category varied across countries/languages (i.e., there was an interaction: country:super_cat).

The preregistration indicated that we’d conduct pairwise follow-up analyses comparing the two question categories and comparing pairs of countires/languages – but, again, I don’t really think we’re interested in comparing pairs of countries/languages, so I’m going to skip that for now. Instead, I’ll compare the two questions categories within each country/language (to explore the significant interaction), as I did for Think Believe 1.

Here we go:

Comparing question categories

r2.5a <- t.test(prop_believeX ~ super_cat, paired = T, d2_anova); r2.5a

    Paired t-test

data:  prop_believeX by super_cat
t = 19.793, df = 387, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.2509326 0.3062839
sample estimates:
mean of the differences 
              0.2786082 

Collapsing across countries/languages, participants wrote significantly more “believe” responses for questions in the religious category (28%) than they did for questions in the fact category (NA%).

Comparing question categories within countries/languages

# US
r2.5b_us <- t.test(prop_believeX ~ super_cat, paired = T,
                   d2_anova %>% filter(country == "US")); r2.5b_us

    Paired t-test

data:  prop_believeX by super_cat
t = 11.476, df = 70, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.3312579 0.4706201
sample estimates:
mean of the differences 
               0.400939 
# Ghana
r2.5b_gh <- t.test(prop_believeX ~ super_cat, paired = T,
                   d2_anova %>% filter(country == "Ghana")); r2.5b_gh

    Paired t-test

data:  prop_believeX by super_cat
t = 4.0562, df = 45, p-value = 0.0001957
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.05691244 0.16917452
sample estimates:
mean of the differences 
              0.1130435 
# Thailand
r2.5b_th <- t.test(prop_believeX ~ super_cat, paired = T,
                   d2_anova %>% filter(country == "Thailand")); r2.5b_th

    Paired t-test

data:  prop_believeX by super_cat
t = 9.7482, df = 97, p-value = 4.691e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.2210417 0.3340604
sample estimates:
mean of the differences 
               0.277551 
# China
r2.5b_ch <- t.test(prop_believeX ~ super_cat, paired = T,
                   d2_anova %>% filter(country == "China")); r2.5b_ch

    Paired t-test

data:  prop_believeX by super_cat
t = 12.57, df = 99, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.2880159 0.3959841
sample estimates:
mean of the differences 
                  0.342 
# Vanuatu
r2.5b_vt <- t.test(prop_believeX ~ super_cat, paired = T,
                   d2_anova %>% filter(country == "Vanuatu")); r2.5b_vt

    Paired t-test

data:  prop_believeX by super_cat
t = 6.8338, df = 72, p-value = 2.235e-09
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.1264582 0.2306194
sample estimates:
mean of the differences 
              0.1785388 

The difference between question categories was significant in each country/language considered alone.

Free response data

Here’s a very quick pass at looking at the most common words/phrases in these free responses – I did a quick and dirty “stemming” (converting, e.g., “believe” and “believes” and “believed” all to the stem “believ”) but we could look into doing something more sophisticated. Here are the top 5 stems for each question category, by country:

country super_cat category response_lemma2 percent n
US religious Christian religious believe 52% 184
think 21% 74
say 10% 37
know 5% 17
read 2% 8
Buddhist religious believe 43% 154
think 27% 95
say 9% 32
know 4% 15
learn 4% 15
fact well-known fact know 45% 158
think 18% 65
believe 10% 35
say 8% 29
learn 5% 16
esoteric fact think 26% 92
know 19% 69
say 11% 38
believe 9% 33
learn 8% 29
life fact think 28% 100
say 16% 58
know 15% 55
forget 5% 16
believe 4% 15
Ghana religious Christian religious know 29% 67
believe 17% 40
say 16% 36
hear 12% 27
see 7% 17
Buddhist religious know 23% 52
say 17% 40
believe 12% 28
see 12% 28
think 12% 27
fact well-known fact know 35% 81
hear 15% 34
say 13% 30
think 10% 23
see 6% 14
esoteric fact know 33% 77
say 15% 35
think 14% 33
hear 12% 28
see 6% 14
life fact know 23% 52
say 18% 41
think 14% 32
see 11% 26
not know 8% 18
Thailand religious Christian religious believe 33% 164
think 26% 126
tell 12% 57
know 6% 31
say 4% 19
Buddhist religious believe 31% 153
think 24% 117
know 15% 72
tell 11% 54
say 4% 20
fact well-known fact know 33% 160
think 24% 117
tell 17% 82
believe 7% 34
say 5% 24
esoteric fact think 32% 157
know 19% 93
tell 12% 60
imagine 6% 29
believe 5% 24
life fact think 36% 178
tell 21% 101
know 17% 85
believe 4% 18
expect 3% 14
China religious Christian religious believe 40% 202
think 29% 146
feel 3% 17
do not believe 3% 14
[adverb] believe 2% 10
say 2% 10
Buddhist religious think 31% 156
believe 27% 135
know 5% 23
feel 3% 17
do not believe 3% 14
fact well-known fact know 57% 285
think 11% 55
believe 6% 29
say 4% 22
be sure of 3% 13
esoteric fact know 32% 160
think 17% 86
do not know 5% 27
say 5% 23
believe 4% 20
life fact know 18% 91
discover 8% 42
say 8% 41
think 8% 41
find 6% 32
remember 6% 32
Vanuatu religious Christian religious believe 31% 114
say 19% 69
know 8% 28
think 7% 27
pray 2% 9
Buddhist religious say 26% 94
believe 16% 59
see 11% 39
think 9% 34
know 5% 19
fact well-known fact know 21% 76
say 21% 76
think 9% 34
believe 8% 31
find out 4% 13
esoteric fact say 22% 81
think 12% 44
know 11% 39
believe 7% 26
see 6% 21
life fact say 29% 105
know 18% 64
think 8% 29
want 6% 23
forget 5% 19

I think there’s lots to discuss here – e.g., the common use of “know” (which I think is already of interest). Also, the Bislama data appears to be in Bislama (not translated) – I’ve included “bilif” (and spelling variants) as “believe” and “ting” (as spelling variants) as “think” in all of the foregoing analyses.

Column `response_lemma2` joining factor and character vector, coercing into character vector

Analysis: Religion and religiosity

Demographics

First, let’s just look at how people in different countries replied to the relevant questions.

thb2_demo_regp: “Are you a part of any religious group?”

thb2_demo_rely: “From 1 to 7, how religious are you? (1 = not religious at all, 7 = extremely religious)”

Seems to have been omitted in Thailand?

thb2_demo_impr: “From 1 to 7, how important to you is your religious practice? (1 = not important at all, 7 = of utmost importance)”

Seems to have been omitted in Thailand?

thb2_demo_wors: “How often do you attend places of worship?”

thb2_demo_bgod: “What best describes your level of belief in God?”

thb2_demo_bbuh: “What best describes your level of belief in Buddha?”

thb2_demo_bosp: “What best describes your level of belief in another spiritual being (other than God or Buddha)?”

thb2_demo_atsn: "What best describes your attitude towards the supernatural?

thb2_demo_imsn: “From 1 to 7, how important to you is your attitude toward the supernatural? (1 = not important at all, 7 = of utmost importance)”

Analyses

Now, let’s look at how responses to our think/believe questions might have varied depending on religiosity/etc. For now, I’ll just focus on a couple of variables that seem to have been answered in reasonable ways.

thb2_demo_rely: “From 1 to 7, how religious are you? (1 = not religious at all, 7 = extremely religious)”

r2.6 <- lmer(believe ~ super_cat * country * thb2_demo_rely_num
             + (1 + super_cat | thb2_subj) + (1 | question),
             data = d2_long %>% 
               filter(country != "Thailand") %>%
               mutate(thb2_demo_rely_num = scale(thb2_demo_rely_num)),
             contrasts = list(country = "contr.sum"))
contrasts dropped from factor country due to missing levelscontrasts dropped from factor country due to missing levelscontrasts dropped from factor country due to missing levelscontrasts dropped from factor country due to missing levels
Parameter β β' β'' Std. Err. df t p
Intercept 0.17 - - 0.02 101.49 10.03 <0.001 ***
Category (religious) 0.12 0.33 0.33 0.02 70.54 7.98 <0.001 ***
Country (US) 0.11 0.20 0.20 0.02 281.00 5.56 <0.001 ***
Country (Ghana) -0.11 -0.19 -0.19 0.03 281.00 -3.61 <0.001 ***
Country (China) 0.01 0.03 0.03 0.02 281.00 0.68 0.498
How religious are you? 0.00 0.01 0.01 0.01 281.00 0.25 0.805
Category (religious) × Country (US) 0.07 0.14 0.14 0.02 281.00 4.78 <0.001 ***
Category (religious) × Country (Ghana) -0.07 -0.13 -0.13 0.02 281.00 -3.03 0.003 **
Category (religious) × Country (China) 0.03 0.06 0.06 0.02 281.00 1.58 0.116
Category (religious) × How religious are you? 0.00 -0.01 -0.01 0.01 281.00 -0.30 0.768
Country (US) × How religious are you? 0.00 0.01 0.01 0.02 281.00 0.20 0.841
Country (Ghana) × How religious are you? 0.02 0.04 0.04 0.02 281.00 0.92 0.359
Country (China) × How religious are you? 0.00 0.00 0.00 0.02 281.00 -0.11 0.914
Category (religious) × Country (US) × How religious are you? 0.00 -0.01 -0.01 0.02 281.00 -0.26 0.796
Category (religious) × Country (Ghana) × How religious are you? 0.01 0.02 0.02 0.02 281.00 0.50 0.618
Category (religious) × Country (China) × How religious are you? 0.00 0.01 0.01 0.02 281.00 0.22 0.823

This analysis suggests that greater religiosity was NOT associated with an increased distinction between religious and fact questions. (Note that this analysis omits participants from Thailand, who did not answer this question about religiosity.)

thb2_demo_impr: “From 1 to 7, how important to you is your religious practice? (1 = not important at all, 7 = of utmost importance)”

r2.7 <- lmer(believe ~ super_cat * country * thb2_demo_impr_num
             + (1 + super_cat | thb2_subj) + (1 | question),
             data = d2_long %>% 
               filter(country != "Thailand") %>%
               mutate(thb2_demo_impr_num = scale(thb2_demo_impr_num)),
             contrasts = list(country = "contr.sum"))
contrasts dropped from factor country due to missing levelscontrasts dropped from factor country due to missing levelscontrasts dropped from factor country due to missing levelscontrasts dropped from factor country due to missing levels
Parameter β β' β'' Std. Err. df t p
Intercept 0.17 - - 0.02 94.36 10.18 <0.001 ***
Category (religious) 0.12 0.32 0.32 0.02 65.40 7.77 <0.001 ***
Country (US) 0.10 0.20 0.20 0.02 280.03 5.43 <0.001 ***
Country (Ghana) -0.09 -0.16 -0.16 0.03 280.03 -3.27 0.001 **
Country (China) 0.02 0.04 0.04 0.02 280.03 0.89 0.372
How important is your religious practice? 0.00 0.00 0.00 0.01 280.03 0.14 0.887
Category (religious) × Country (US) 0.08 0.15 0.15 0.02 280.03 4.97 <0.001 ***
Category (religious) × Country (Ghana) -0.07 -0.13 -0.13 0.02 280.03 -3.10 0.002 **
Category (religious) × Country (China) 0.03 0.07 0.07 0.02 280.03 2.02 0.045 *
Category (religious) × How important is your religious practice? 0.00 0.00 0.00 0.01 280.03 0.01 0.989
Country (US) × How important is your religious practice? -0.02 -0.03 -0.03 0.02 280.03 -0.88 0.382
Country (Ghana) × How important is your religious practice? 0.01 0.02 0.02 0.02 280.03 0.52 0.603
Country (China) × How important is your religious practice? 0.00 0.00 0.00 0.02 280.03 0.02 0.983
Category (religious) × Country (US) × How important is your religious practice? -0.02 -0.04 -0.04 0.02 280.03 -1.55 0.123
Category (religious) × Country (Ghana) × How important is your religious practice? 0.01 0.02 0.02 0.02 280.03 0.61 0.545
Category (religious) × Country (China) × How important is your religious practice? 0.00 0.00 0.00 0.02 280.03 -0.08 0.934

This analysis suggests that more importance placed on religious practice was NOT associated with an increased distinction between religious and fact questions. (Note that this analysis omits participants from Thailand, who did not answer this question about religiosity.)

thb2_demowors: “How often do you attend places of worship?”

r2.8 <- lmer(believe ~ super_cat * country * thb2_demo_wors_num
             + (1 + super_cat | thb2_subj) + (1 | question),
             data = d2_long %>% 
               mutate(thb2_demo_wors_num = scale(thb2_demo_wors_num)))
Parameter β β' β'' Std. Err. df t p
Intercept 0.17 - - 0.02 189.99 8.63 <0.001 ***
Category (religious) 0.12 0.32 0.32 0.02 121.80 7.14 <0.001 ***
Country (Gh.) -0.12 -0.18 -0.18 0.04 364.98 -2.74 0.006 **
Country (Th.) 0.02 0.03 0.03 0.02 364.98 0.71 0.475
Country (Ch.) 0.02 0.04 0.04 0.04 364.98 0.55 0.586
Country (Vt.) -0.03 -0.04 -0.04 0.04 364.98 -0.71 0.480
How often do you attend places of worship? 0.02 0.05 0.05 0.02 364.98 1.10 0.273
Category (religious) × Country (Gh.) -0.08 -0.13 -0.13 0.03 364.99 -2.39 0.017 *
Category (religious) × Country (Th.) 0.01 0.02 0.02 0.02 364.99 0.79 0.431
Category (religious) × Country (Ch.) 0.02 0.04 0.04 0.03 364.99 0.80 0.425
Category (religious) × Country (Vt.) -0.03 -0.05 -0.05 0.03 364.99 -0.96 0.336
Category (religious) × How often do you attend places of worship? 0.00 0.01 0.01 0.01 364.99 0.21 0.833
Country (Gh.) × How often do you attend places of worship? 0.02 0.04 0.04 0.04 364.98 0.61 0.544
Country (Th.) × How often do you attend places of worship? 0.02 0.02 0.02 0.03 364.98 0.44 0.657
Country (Ch.) × How often do you attend places of worship? -0.01 -0.02 -0.02 0.03 364.98 -0.39 0.695
Country (Vt.) × How often do you attend places of worship? -0.01 -0.02 -0.02 0.03 364.98 -0.33 0.739
Category (religious) × Country (Gh.) × How often do you attend places of worship? 0.02 0.03 0.03 0.03 364.99 0.54 0.587
Category (religious) × Country (Th.) × How often do you attend places of worship? 0.02 0.02 0.02 0.03 364.99 0.65 0.515
Category (religious) × Country (Ch.) × How often do you attend places of worship? -0.01 -0.01 -0.01 0.02 364.99 -0.26 0.796
Category (religious) × Country (Vt.) × How often do you attend places of worship? -0.01 -0.01 -0.01 0.03 364.99 -0.22 0.826

This analysis suggests that frequency of attendence was NOT associated with an increased distinction between religious and fact questions.

LS0tCnRpdGxlOiAiVGhpbmsgQmVsaWV2ZSAyIChmcmVlIHJlc3BvbnNlKSIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKLS0tCgpgYGB7ciBzZXR1cH0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGLCBtZXNzYWdlID0gRikKYGBgCmthYmxlCkluIHRoaXMgbm90ZWJvb2sgd2UgYW5hbHl6ZSB0aGUgc2Vjb25kICJ0aGluay9iZWxpZXZlIiB0YXNrLCBpbiB3aGljaCBwYXJ0aWNpcGFudHMgY29tcGxldGVkIGEgc2VyaWVzIG9mIGZpbGwtaW4tdGhlLWJsYW5rcyB3aXRoIGZyZWUgcmVzcG9uc2VzLgoKCmBgYHtyfQpzb3VyY2UoIi4vc2NyaXB0cy9kZXBlbmRlbmNpZXMuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2N1c3RvbV9mdW5zLlIiKQpzb3VyY2UoIi4vc2NyaXB0cy92YXJfcmVjb2RlX2NvbnRyYXN0LlIiKQpgYGAKCmBgYHtyfQpkMl9yYXcgPC0gcmVhZF94bHN4KCIuLi9kYXRhL1RoaW5rQmVsaWV2ZTJfb3JnYW5pemVkLnhsc3giLCBzaGVldCA9ICJWMSZWMiBubyBkdXBlcyIpICU+JQogICMgZW5zdXJlIG5vIGR1cGxpY2F0ZXMKICBncm91cF9ieSh0aGIyX3N1YmopICU+JQogIHRvcF9uKDEsIHRoYjJfYmF0YykgJT4lIAogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUodGhiMl9jdHJ5ID0gZmFjdG9yKHRoYjJfY3RyeSwgbGV2ZWxzID0gbGV2ZWxzX2NvdW50cnkpKQpgYGAKCmBgYHtyfQprZXkyIDwtIHJlYWRfeGxzeCgiLi4vZGF0YS9UaGlua0JlbGlldmUyX29yZ2FuaXplZC54bHN4Iiwgc2hlZXQgPSAxKVsxLF0gJT4lIAogIGRhdGEuZnJhbWUoKSAlPiUKICAjIGdldCByaWQgb2YgZXh0cmEgcXVhbHRyaWNzIHF1ZXN0aW9ucwogIHNlbGVjdCgtYyhTdGFydERhdGU6VXNlckxhbmd1YWdlKSkgJT4lCiAgdCgpICU+JSAKICBkYXRhLmZyYW1lKCkgJT4lIAogIHJvd25hbWVzX3RvX2NvbHVtbigicXVlc3Rpb24iKSAlPiUKICByZW5hbWUocXVlc3Rpb25fdGV4dCA9ICIuIikgJT4lCiAgIyBnZXQgcmlkIG9mIHdoaXRlIHNwYWNlCiAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBnc3ViKCJcXHMrIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSkgJT4lCiAgIyBoYW5kIGNvZGUgcXVlc3Rpb24gY2F0ZWdvcmllcwogIG11dGF0ZShjYXRlZ29yeSA9IGNhc2Vfd2hlbigKICAgIGdyZXBsKCJmaW5hbCBwYXBlciIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoImhpZ2h3YXkgaW50byB0b3duIiwgcXVlc3Rpb25fdGV4dCkgfAogICAgICBncmVwbCgiZ3JvY2VyeSBzdG9yZSIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoImNoZW1pc3RyeSBib29rIiwgcXVlc3Rpb25fdGV4dCkgfAogICAgICBncmVwbCgiY29va2luZyBub29kbGVzIiwgcXVlc3Rpb25fdGV4dCkgfiAibGlmZSBmYWN0IiwKICAgIGdyZXBsKCJwcmF5aW5nIHRvIEdvZCIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoImFuZ2VscyBkZWxpdmVyIiwgcXVlc3Rpb25fdGV4dCkgfAogICAgICBncmVwbCgiZ28gdG8gSGVhdmVuIiwgcXVlc3Rpb25fdGV4dCkgfAogICAgICBncmVwbCgiY2hhbmdlZCB3YXRlciIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoImh1bWFuIHNpbnMiLCBxdWVzdGlvbl90ZXh0KSB+ICJDaHJpc3RpYW4gcmVsaWdpb3VzIiwKICAgIGdyZXBsKCJjeWNsZSBvZiBkZWF0aCIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoIkJ1ZGRoYSBmb3VuZCBzcGlyaXR1YWwiLCBxdWVzdGlvbl90ZXh0KSB8CiAgICAgIGdyZXBsKCJsb3R1cyBmbG93ZXIgYmxvb21lZCIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoImdob3N0cyBzdWZmZXIiLCBxdWVzdGlvbl90ZXh0KSB8CiAgICAgIGdyZXBsKCJidXJuaW5nIGluY2Vuc2UiLCBxdWVzdGlvbl90ZXh0KSB+ICJCdWRkaGlzdCByZWxpZ2lvdXMiLAogICAgZ3JlcGwoIm1vb24gZ29lcyBhcm91bmQiLCBxdWVzdGlvbl90ZXh0KSB8CiAgICAgIGdyZXBsKCJCYXJhY2sgT2JhbWEiLCBxdWVzdGlvbl90ZXh0KSB8CiAgICAgIGdyZXBsKCJ1c2luZyBiYXR0ZXJpZXMiLCBxdWVzdGlvbl90ZXh0KSB8CiAgICAgIGdyZXBsKCJCcmF6aWwiLCBxdWVzdGlvbl90ZXh0KSB8CiAgICAgIGdyZXBsKCJhbmNpZW50IFJvbWFuIiwgcXVlc3Rpb25fdGV4dCkgfiAid2VsbC1rbm93biBmYWN0IiwKICAgIGdyZXBsKCJvY3RvcHVzIiwgcXVlc3Rpb25fdGV4dCkgfAogICAgICBncmVwbCgiSm9obiBCcm93biIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoInRhbGxlciBtb3VudGFpbiIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoInNwZWNpZXMgb2YgZmlzaCIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoImNvbnRhaW5zIG1vcmUgY29wcGVyIiwgcXVlc3Rpb25fdGV4dCkgfiAiZXNvdGVyaWMgZmFjdCIsCiAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXykpICU+JQogIG11dGF0ZShjYXRlZ29yeSA9IGZhY3RvcihjYXRlZ29yeSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkNocmlzdGlhbiByZWxpZ2lvdXMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnVkZGhpc3QgcmVsaWdpb3VzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlbGwta25vd24gZmFjdCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlc290ZXJpYyBmYWN0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpZmUgZmFjdCIpKSwKICAgICAgICAgc3VwZXJfY2F0ID0gY2FzZV93aGVuKGdyZXBsKCJmYWN0IiwgY2F0ZWdvcnkpIH4gImZhY3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoInJlbGlnaW91cyIsIGNhdGVnb3J5KSB+ICJyZWxpZ2lvdXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IE5BX2NoYXJhY3Rlcl8pLAogICAgICAgICBzdXBlcl9jYXQgPSBmYWN0b3Ioc3VwZXJfY2F0LCBsZXZlbHMgPSBjKCJyZWxpZ2lvdXMiLCAiZmFjdCIpKSkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJvcmRlciIpICU+JQogIG11dGF0ZShvcmRlciA9IGFzLm51bWVyaWMob3JkZXIpLAogICAgICAgICBxdWVzdGlvbl90ZXh0ID0gZ3N1Yigi4oCaw4TDtCIsICInIiwgcXVlc3Rpb25fdGV4dCksCiAgICAgICAgIHF1ZXN0aW9uX3RleHRfc2hvcnQgPSBnc3ViKCJeLip0aGF0ICIsICIuLi4iLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgdmFyX25hbWUgPSBuYW1lcyhkMl9yYXdbbmFtZXMoZDJfcmF3KSAhPSAidGhiMl92ZXJzaW9uIl0pKQpgYGAKCmBgYHtyfQpkMiA8LSBkMl9yYXcgJT4lCiAgZmlsdGVyKHRoYjJfY3RyeSAlaW4lIGxldmVsc19jb3VudHJ5KSAlPiUKICBtdXRhdGUodGhiMl9jdHJ5ID0gZmFjdG9yKHRoYjJfY3RyeSwgbGV2ZWxzID0gbGV2ZWxzX2NvdW50cnkpLAogICAgICAgICB0aGIyX2RlbW9fc2V4ID0gZmFjdG9yKHRoYjJfZGVtb19zZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiTWFsZSIsICJGZW1hbGUiLCAiT3RoZXIiKSksIAogICAgICAgICB0aGIyX2RlbW9fYWdlID0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIodGhiMl9kZW1vX2FnZSkpKSAlPiUKICBtdXRhdGVfYXQodmFycyh0aGIyX2RlbW9fcmVncCwgdGhiMl9kZW1vX29sYW5nKSwKICAgICAgICAgICAgZnVucyhmYWN0b3IoLiwgbGV2ZWxzID0gYygiTk8iLCAiWUVTIikpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnModGhiMl9kZW1vX3JlbHksIHRoYjJfZGVtb19pbXByLCB0aGIyX2RlbW9faW1zbiksIAogICAgICAgICAgICBmdW5zKGZhY3RvciguLCBsZXZlbHMgPSAxOjcpKSkgJT4lCiAgbXV0YXRlKHRoYjJfZGVtb193b3JzID0gZmFjdG9yKHRoYjJfZGVtb193b3JzLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiTmV2ZXIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT25jZSBhIHllYXIgb3IgbGVzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkEgZmV3IHRpbWVzIGEgeWVhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9uY2Ugb3IgdHdpY2UgYSBtb250aCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV2ZXJ5IHdlZWsgb3IgbW9yZSBvZnRlbiIpKSwKICAgICAgICAgdGhiMl9kZW1vX2Jnb2QgPSBmYWN0b3IodGhiMl9kZW1vX2Jnb2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIk5vdCBhdCBhbGwgYmVsaWV2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJlbGlldmUgc2xpZ2h0bHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCZWxpZXZlIG1vZGVyYXRlbHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCZWxpZXZlIHN0cm9uZ2x5IikpLAogICAgICAgICB0aGIyX2RlbW9fYmJ1aCA9IGZhY3Rvcih0aGIyX2RlbW9fYmJ1aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiTm90IGF0IGFsbCBiZWxpZXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmVsaWV2ZSBzbGlnaHRseSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJlbGlldmUgbW9kZXJhdGVseSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJlbGlldmUgc3Ryb25nbHkiKSksCiAgICAgICAgIHRoYjJfZGVtb19ib3NwID0gZmFjdG9yKHRoYjJfZGVtb19ib3NwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJOb3QgYXQgYWxsIGJlbGlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCZWxpZXZlIHNsaWdodGx5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmVsaWV2ZSBtb2RlcmF0ZWx5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmVsaWV2ZSBzdHJvbmdseSIpKSwKICAgICAgICAgdGhiMl9kZW1vX2F0c24gPSBmYWN0b3IodGhiMl9kZW1vX2F0c24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIlRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcgYXMgc3VwZXJuYXR1cmFsIGZvcmNlcyBvciBiZWluZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXZSBjYW5ub3Qga25vdyBpZiB0aGVyZSBhcmUgc3VwZXJuYXR1cmFsIGZvcmNlcyBhbmQgYmVpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlcmUgbWlnaHQgYmUgc3VwZXJuYXR1cmFsIGZvcmNlcyBhbmQgYmVpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3VwZXJuYXR1cmFsIGZvcmNlcyBhbmQgYmVpbmdzIGV4aXN0IGJ1dCB3ZSBjYW5ub3Qga25vdyB3aGF0IHRoZXkgYXJlIGxpa2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGVyZSBkZWZpbml0ZWx5IGFyZSBzdXBlcm5hdHVyYWwgZm9yY2VzIGFuZCBiZWluZ3MiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHRoYjJfZGVtb19yZWx5LCB0aGIyX2RlbW9faW1wciwgdGhiMl9kZW1vX3dvcnMsIHRoYjJfZGVtb19iZ29kLCAKICAgICAgICAgICAgICAgICB0aGIyX2RlbW9fYmJ1aCwgdGhiMl9kZW1vX2Jvc3AsIHRoYjJfZGVtb19hdHNuLCB0aGIyX2RlbW9faW1zbiksIAogICAgICAgICAgICBmdW5zKG51bSA9IGFzLm51bWVyaWMoLikgLSAxKSkKCmNvbnRyYXN0cyhkMiR0aGIyX2N0cnkpID0gY29udHJhc3RfY291bnRyeQpgYGAKCk5vdGU6IFRoZXJlIGFyZSBzb21lIHN1YmplY3RpdmUgY2FsbHMgaGVyZSwgYW5kIHRyYW5zbGF0aW9uIGlzc3Vlcy4gRm9yIG5vdywgSSd2ZSB1c2VkIGEgY29tYmluYXRpb24gb2YgYXV0b21hdGljICJsZW1tYXRpemF0aW9uIiBhbmQgaGFuZC1jb2RpbmcgdG8gZG8gbXkgYmVzdCB0byBjb2RlIHdoZXRoZXIgcmVzcG9uc2VzIHNob3VsZCBjb3VudCBhcyAiYmVsaWV2ZSIgKGUuZy4sIGluY2x1ZGluZyBvYnZpb3VzIGNhc2VzIGxpa2UgImJlbGlldmVzIiBhbmQgImJlbGlldmVkIjsgaW5jbHVkaW5nIEJpc2xhbWEgImJlbGlmIiBhbmQgImJpbGlmIiBhbmQgb3RoZXIgc3BlbGxpbmdzKS4KCkFzIG9mIDIwMjAtMDEtMjIsIEkgaGF2ZSB0d28gdmVyc2lvbnMgb2YgdGhlc2UgdmFyaWFibGVzIC0tIG9uZSB0aGF0IG9ubHkgaW5jbHVkZXMgcmVzcG9uc2VzIHRoYXQgYXJlIHN0cmljdGx5ICJiZWxpZXZlIiBhbmQgb25lIHRoYXQgYWxzbyBpbmNsdWRlcyBjYXNlcyB0aGF0IGludm9sdmUgdGhlIHdvcmQgImJlbGlldmUiIChlLmcuLCAiZmlybWx5IGJlbGlldmVzLCIgImRvZXMgbm90IGJlbGlldmUiKSAtLSBhbmQgbGlrZXdpc2UgZm9yIHRoaW5rLiBUaGUgbG9vc2VyIGludGVycHJldGF0aW9ucyBhcmUgY2FsbGVkIGBiZWxpZXZlWGAgKG9yICJiZWxpZWZcKiIpIGFuZCBgdGhpbmtYYCAob3IgInRoaW5rXCoiKS4KCmBgYHtyfQpkMl9sb25nIDwtIGQyICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIHRoYjJfZ2hvc3RzaHVuZ2VyOnRoYjJfb2JhbWEpICU+JQogIG11dGF0ZShyZXNwb25zZV9sZW1tYSA9IGxlbW1hdGl6ZV9zdHJpbmdzKHRvbG93ZXIocmVzcG9uc2UpKSwKICAgICAgICAgcmVzcG9uc2VfbGVtbWEgPSBnc3ViKCJcXCggIiwgIiIsIHJlc3BvbnNlX2xlbW1hKSwKICAgICAgICAgcmVzcG9uc2VfbGVtbWEgPSBnc3ViKCIgXFwpIiwgIiIsIHJlc3BvbnNlX2xlbW1hKSkgJT4lCiAgbXV0YXRlKHJlc3BvbnNlX2xlbW1hMiA9IGNhc2Vfd2hlbigKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygidGFsZW0iLCAidGFsZW1hb3QiLCAidGFsbSIsICJibG8gdGFsZW0iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAidGFsZW1vdXQiLCAiYmluIHRhbGVtIikgfiAic2F5IiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygibHVrIiwgImxvb2siLCAibHVraW0iLCAibHVrIHNhdmUiLCAibHVrIHZpc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImx1a3VtIiwgImJpbiBrbyBsdWsiLCAibG9rIikgfiAic2VlIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiYmVsaWV2ZSIsICJiZWxpZWYiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVsaXYiLCAiYmVsaXZzIiwgImJlbGl2ZWQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVsaXZtIiwgImJlbGl2ZW0iLCAiYmVsaXZpbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImJlbGlmIiwgImJlbGlmcyIsICJiZWxpZmVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVsaWYiLCAiYmVsaWZlbSIsICJiZWxpZmltIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmlsaXYiLCAiYmlsaXZzIiwgImJpbGl2ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJiaWxpdm0iLCAiYmlsaXZlbSIsICJiaWxpdmltIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmlsaWYiLCAiYmlsaWZzIiwgImJpbGlmZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJiaWxpZm0iLCAiYmlsaWZlbSIsICJiaWxpZmltIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVsaXZlIiwgImJlbGl2ZXMiLCAiYmVsaXZlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImJpbGl2ZSIsICJiaWxpdmVzIiwgImJpbGl2ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJiZWxlaXZlIiwgImJlbGVpdmVzIiwgImJlbGVpdmVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVsZWl2bSIsICJiZWxlaXZlbSIsICJiZWxlaXZpbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImJpbGl2aWVtIiwgImJlbGl2aWVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVpdiIsICJiZWl2ZXMiLCAiYmVpdmVkIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgImJlaXZtIiwgImJlaXZlbSIsICJiZWl2aW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICJiZWxlaWYiLCAiYmVsZWlmcyIsICJiZWxlaWZlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImJlbGVpZm0iLCAiYmVsZWlmZW0iLCAiYmVsZWlmaW0iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVsaWV2ZW0iLCAid3UgYmVsaXZlIikgfiAiYmVsaWV2ZSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImJpbGl2IHN0cm9uZyIsICJibGluZGx5IGJlbGlldmUiLCAiZGVlcGx5IGJlbGlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJmaXJtbHkgYmVsaWV2ZSIsICJzdXJlbHkgYmVsaWV2ZSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZ2x5IGJlbGlldmUiKSB+ICJbYWR2ZXJiXSBiZWxpZXZlIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiZG9lcyBub3QgYmVsaWV2ZSIsICJkb2Vzbid0IGJlbGlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJkbyBub3QgYmVsaWV2ZSIsICJkb24ndCBiZWxpZXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlkbid0IGJlbGlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJubyBiZWxpZXZlbSIpIH4gImRvIG5vdCBiZWxpZXZlIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygidGhpbmsiLCAidGluZ3RpbmciLCAidGluayIsICJ0aG5rcyIsICJ0aW5rcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImJlY2F1c2Ugc2hlIHRoaW5rIiwgInNoZSB0aGluayIsICJ0aGluZyIsICJ0aW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAidGhpbmsgcmlnaHQgdGhhdCIsICJ0aGluayB0aGF0IiwgInRoaW5rIHRoaW5rIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAidGhpbmt0aGluayIsICJ1c2UgdG8gdGhpbmsiKSB+ICJ0aGluayIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoInRpbmdiYW90IiwgInRpbmdib2F0IiwgInRpbmcgYm90IiwgInRpbmdiYXV0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAidGluZ2JvdCIsICJ0aW5naWJhb3QiLCAidGlua2Jhb3QiLCAidGhpbmdiYW90IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgInRoaW5nYmF1dCIpIH4gInRoaW5rIGFib3V0L3JlbWVtYmVyIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygidGhpbmsgb2YiKSB+ICJ0aGluayBvZiIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImRvZXMgbm90IHRoaW5rIiwgImRvZXNuJ3QgdGhpbmsiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiZG8gbm90IHRoaW5rIiwgImRvbid0IHRoaW5rIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgImRpZG4ndCB0aGluayIsICJuZXZlciB0aGluayIsICJub3QgdGhpbmsiKSB+ICJkbyBub3QgdGhpbmsiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJYWCIpIH4gIlthZHZlcmJdIHRoaW5rIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygic2F2ZSIsICJzYXZlaCIsICJzYWUiKSB+ICJrbm93IiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygibm8gc2F2ZSIsICJub3NhdmUiLCAibm8gc2FlIiwgIm5vc2FlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGJpbiBzYXZlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgImRvZXMgbm90IGtub3ciLCAiZG9lc24ndCBrbm93IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgImRvIG5vdCBrbm93IiwgImRvbid0IGtub3ciLAogICAgICAgICAgICAgICAgICAgICAgICAgICJkaWRuJ3Qga25vdyIpIH4gImRvIG5vdCBrbm93IiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygid2FudGVtIiwgIndhbnRlIiwgIndhbnRtIikgfiAid2FudCIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImhhcmVtIiwgInN0YXAgaGFyZW0iKSB+ICJoZWFyIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygidG9rYmFvdCIsICJ0b2sgYm90IiwgInRva2Jhb3V0IiwgInRhbGtib2F0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgInRha2JvYXQiLCAidG9rYmF1dCIsICJ0b2thYm91dCIpIH4gImRlc2NyaWJlL2Rpc2N1c3MiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJyaWRpbSIsICJyZWFkaW0iLCAicmVhZG0iLCAicmlkZW0iLCAicmVhZGVtIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZGVtIikgfiAicmVhZCIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImtpYW1hbiIsICJraWVtYW4iKSB+ICJsaWUiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJsYW5lbSIpIH4gImxlYXJuIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygidHJhc3RlbSIsICJ0cnVzdGVtIikgfiAidHJ1c3QiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJjb25mZW1lbSIsICJjb25maXJtZW0iKSB+ICJjb25maXJtIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiZmFlbmVtIiwgImZhaW5lbSIsICJmaW5lbSIsICJiZSBmYWluZW0iLCAiZmluaWVtIikgfiAiZmluZCIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImZyYWV0IiwgImZyaWdodCIpIH4gImZlYXIiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJsYWVrZW0iLCAibGlrZW0iLCAibGFpa2VtIikgfiAibGlrZSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoIm5vIGxpa2VtIikgfiAiZG8gbm90IGxpa2UiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJzZWsiKSB+ICJiZSBzaGFrZW4iLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJzYXByYWlzIiwgInNhcHJhcyIsICJzYXByaWFzIikgfiAiYmUgc3VycHJpc2VkIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygidGlqaW0iLCAidGl0amltIikgfiAidGVhY2giLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJ3YXJpIikgfiAid29ycnkiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJkcmVhbSIsICJkcmltIiwgImRyb2VtIikgfiAiZHJlYW0iLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJlbmthcmVqIikgfiAiZW5jb3VyYWdlIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiZXhwbGVuZW0iKSB+ICJleHBsYWluIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiZmFlbmVtYW90IiwgImZhZW5tYW90IiwgImZhaW5lbSBvdXQiLCAiZmFpbm1vYXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlubWFvdCIsICJmYWVuYW1hb3QiLCAiZmFlbmVtYXV0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaW5lbSBhb3QiLCAiZmFuZW1hdXQiLCAiZmluZW1hb3QiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiZmluZW1vdXQiLCAiZmFlbmVtIG1hb3QiLCAiZmFlbmVtYWF0IiwgImZhZW5lbW9hdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImZhZW5lbW91dCIsICJmaW5lbSBhb3QiKSB+ICJmaW5kIG91dCIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImZvZ2F0ZW0iLCAiZm9yZ2V0ZW0iLCAiZm9nZXRlbSIsICJmb2dhdGVtIiwgImZvZ2V0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9rZXRlbSIsICJmb3JnZXQiLCAiZm9rZXQiLCAiZm9rZXRvbSIpIH4gImZvcmdldCIsIAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJmcm9tIikgfiAiYmVjYXVzZSBvZiIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImhvcCIpIH4gImhvcGUiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJpbWFnaW4iLCAiaW1hZ2luZW0iKSB+ICJpbWFnaW5lIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiaW5mb21lbSIsICJpbmZvcm1lbSIsICJpbmZvcm1lbiIpIH4gImluZm9ybSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImthc2VtIikgfiAicmVjZWl2ZSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImtyb3MiKSB+ICJhbmdyeSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImt3ZXN0ZW4iLCAicXVlc3RlbmVtIikgfiAicXVlc3Rpb24iLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJub3Rpc2ltIikgfiAibm90aWNlIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygicmljb25pemVtIiwgInJpY29uaXplbiIpIH4gInJlY29nbml6ZSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoInJpbWVtYmFyZW0iLCAicmVtZW1iYSIsICJyZW1lbWJlciIpIH4gInJlbWVtYmVyIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygicmlwb3QiLCAicmVwb3J0YW0iLCAicmlib3RlbSIpIH4gInJlcG9ydCIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoInNpbmdhb3QiKSB+ICJjYWxsIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygic293ZW0iLCAic29lbSIpIH4gInNob3ciLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJ3aXRobmVzc2VtIikgfiAid2l0bmVzcyIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImtlcyIpIH4gImNhc2UiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJzdHVkaSIsICJzdHVkeSIsICJzdGFkeSIsICJzdGFkaSIpIH4gInN0dWR5IiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiaGF2ZW0iKSB+ICJoYXZlIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiamVzIHNhdmUiKSB+ICJjb21lIHRvIGtub3ciLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJzYXZlIGZpbmlzIikgfiAiYWxyZWFkeSBrbm93IiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygidW5kZXJzdGFuZW0iLCAiYW50YXN0YW5lbSIpIH4gInVuZGVyc3RhbmQiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJubyB1bmRlcnN0YW5lbSIpIH4gImRvIG5vdCB1bmRlcnN0YW5kIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiYWdyaSIpIH4gImFncmVlIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiYXNrZW0iKSB+ICJhc2siLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJiaW4gaWRlbnRpZmkiKSB+ICJpZGVudGlmeSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImRpc2NvdmVyZW0iLCAiZGlza2FyYXJlbSIpIH4gImRpc2NvdmVyIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiZm9sZW1hcCIpIH4gImZvbGxvdyB1cCIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoInJpZWxhZXNtIiwgInJlYWxhZXNlbSIsICJyZWFsaXNlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWxpemVtIikgfiAicmVhbGl6ZSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoIm5vIHJpZWxhZXNtIikgfiAiZGlkIG5vdCByZWFsaXplIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygicmFldGVtIiwgIndyaXRlbSIsICJyYWl0ZW0iLCAicml0ZW0iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmlyaXRpbmdidXQiKSB+ICJ3cml0ZSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoInRyYWVtIikgfiAidHJ5IiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygid2F0Y2hlbSIsICJ3YXRjaG0iLCAid2FqZW0iKSB+ICJ3YXRjaCIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoInRpbmdzZSIsICJ0dW5nIHNlIikgfiAiZXhwcmVzcyBhbiBvcGluaW9uIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygicmFvIikgfiAiYXJndWUiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJhbnNhIiwgImFuc2FyZW0iKSB+ICJhbnN3ZXIiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJqZWtlbSIpIH4gImNoZWNrIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygib2xzZW0iKSB+ICJhbGwtc2FtZSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoInNlcmNoZW0iKSB+ICJzZWFyY2giLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJzdWEiKSB+ICJiZSBzdXJlIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygicHJvbWVzIikgfiAicHJvbWlzZSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoIndldCIpIH4gIndhaXQiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJrcmFlIikgfiAiY3J5IiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygicHJhZSIpIH4gInByYXkiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJyaW5nIikgfiAiY2FsbCIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoInVzZSB0byBzaGUgZmlsbCB0aGlzIHdheSIpIH4gImZlZWwiLCAKICAgIHJlc3BvbnNlX2xlbW1hID09ICJtZGF0YSIgfiBOQV9jaGFyYWN0ZXJfLAogICAgVFJVRSB+IHJlc3BvbnNlX2xlbW1hCiAgKSkgJT4lCiAgbXV0YXRlKHRoaW5rID0gaWZlbHNlKHJlc3BvbnNlX2xlbW1hMiAlaW4lIGMoInRoaW5rIiwgInRob3VnaHQiKSwgVCwgRiksCiAgICAgICAgIHRoaW5rWCA9IGlmZWxzZShncmVwbCgidGhpbmsiLCByZXNwb25zZV9sZW1tYTIpIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoInRob3VnaHQiLCByZXNwb25zZV9sZW1tYTIpLCBULCBGKSkgJT4lCiAgbXV0YXRlKGJlbGlldmUgPSBpZmVsc2UocmVzcG9uc2VfbGVtbWEyICVpbiUgYygiYmVsaWV2ZSIsICJiZWxpZWYiKSwgVCwgRiksCiAgICAgICAgIGJlbGlldmVYID0gaWZlbHNlKGdyZXBsKCJiZWxpZSIsIHJlc3BvbnNlX2xlbW1hMiksIFQsIEYpKSAlPiUKICBtdXRhdGUocmVzcG9uc2VfY2F0MyA9IGNhc2Vfd2hlbih0aGluayA9PSBUIH4gInRoaW5rIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWxpZXZlID09IFQgfiAiYmVsaWV2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlzLm5hKHJlc3BvbnNlKSB+ICJvdGhlciByZXNwb25zZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IE5BX2NoYXJhY3Rlcl8pLAogICAgICAgICByZXNwb25zZV9jYXQzID0gZmFjdG9yKHJlc3BvbnNlX2NhdDMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIm90aGVyIHJlc3BvbnNlIiwgInRoaW5rIiwgImJlbGlldmUiKSksCiAgICAgICAgIHJlc3BvbnNlWF9jYXQzID0gY2FzZV93aGVuKHRoaW5rWCA9PSBUIH4gInRoaW5rKiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlbGlldmVYID09IFQgfiAiYmVsaWV2ZSoiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXMubmEocmVzcG9uc2UpIH4gIm90aGVyIHJlc3BvbnNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IE5BX2NoYXJhY3Rlcl8pLAogICAgICAgICByZXNwb25zZVhfY2F0MyA9IGZhY3RvcihyZXNwb25zZVhfY2F0MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygib3RoZXIgcmVzcG9uc2UiLCAidGhpbmsqIiwgImJlbGlldmUqIikpLAogICAgICAgICByZXNwb25zZV9jYXQgPSByZWNvZGVfZmFjdG9yKGFzLmNoYXJhY3RlcihiZWxpZXZlKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZBTFNFIiA9ICJvdGhlciIsICJUUlVFIiA9ICJiZWxpZXZlIiksCiAgICAgICAgIHJlc3BvbnNlWF9jYXQgPSByZWNvZGVfZmFjdG9yKGFzLmNoYXJhY3RlcihiZWxpZXZlWCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkFMU0UiID0gIm90aGVyIiwgIlRSVUUiID0gImJlbGlldmVYIikpICU+JQogIGxlZnRfam9pbihrZXkyICU+JSBzZWxlY3QoLXF1ZXN0aW9uKSAlPiUgcmVuYW1lKHF1ZXN0aW9uID0gdmFyX25hbWUpKQoKY29udHJhc3RzKGQyX2xvbmckdGhiMl9jdHJ5KSA9IGNvbnRyYXN0X2NvdW50cnkKIyBjb250cmFzdHMoZDJfbG9uZyRjYXRlZ29yeSkgPSBjb250cmFzdF9jYXRlZ29yeQpjb250cmFzdHMoZDJfbG9uZyRjYXRlZ29yeSkgPSBjb250cmFzdF9jYXRlZ29yeV9vcnRoCmNvbnRyYXN0cyhkMl9sb25nJHN1cGVyX2NhdCkgPSBjb250cmFzdF9zdXBlcl9jYXQKYGBgCgpgYGB7cn0KIyBpbXBsZW1lbnQgZXhjbHVzaW9uIGNyaXRlcmlhIGFuZCByZW5hbWUgY291bnRyeSB2YXJpYWJsZQpkMiA8LSBkMiAlPiUgCiAgZmlsdGVyKHRoYjJfb3JkciA9PSAiWWVzIiwgdGhiMl9hdHRuID09ICJQYXNzIikgJT4lCiAgcmVuYW1lKGNvdW50cnkgPSB0aGIyX2N0cnkpCgpkMl9sb25nIDwtIGQyX2xvbmcgJT4lIAogIGZpbHRlcih0aGIyX29yZHIgPT0gIlllcyIsIHRoYjJfYXR0biA9PSAiUGFzcyIpICU+JQogIHJlbmFtZShjb3VudHJ5ID0gdGhiMl9jdHJ5KQpgYGAKCgojIE92ZXJ2aWV3CgpGcm9tIHRoZSBwcmVyZWdpc3RyYXRpb24gKFtsaW5rXShodHRwczovL2FzcHJlZGljdGVkLm9yZy9wNml5My5wZGYpKToKCj4gIk91ciBvdmVyYXJjaGluZyBoeXBvdGhlc2lzIGZvciB0aGUgcHJlc2VudCBzdHVkeSBpcyB0aGF0IFsuLi5dIG90aGVyIGxhbmd1YWdlcyB3aWxsIGhhdmUgYW4gZXBpc3RlbWljIHZlcmIgdGhhdCBpcyBtb3JlIGxpa2VseSB0byBiZSB1c2VkIGZvciByZWxpZ2lvdXMgYXR0aXR1ZGUgcmVwb3J0cyAoc2ltaWxhciB0byBFbmdsaXNoIOKAnGJlbGlldmXigJ0pIGFuZCBhIGRpZmZlcmVudCBlcGlzdGVtaWMgdmVyYiB0aGF0IGlzIG1vcmUgbGlrZWx5IHRvIGJlIHVzZWQgZm9yIG1hdHRlci1vZi1mYWN0IGF0dGl0dWRlIHJlcG9ydHMgKHNpbWlsYXIgdG8gRW5nbGlzaCDigJx0aGlua+KAnSkuIAo+IAo+IEZvciB0aGlzIHN0dWR5LCB3ZSBhcmUgZXhhbWluaW5nIGZpdmUgbGFuZ3VhZ2VzIGluIGZpdmUgcmVnaW9ucyBvZiBpbnRlcmVzdDogKGkpIE1hbmRhcmluIGluIENoaW5hOyAoaWkpIFRoYWkgaW4gVGhhaWxhbmQ7IChpaWkpIEJpc2xhbWEgKGFuIEVuZ2xpc2gtYmFzZWQgY3Jlb2xlCmxhbmd1YWdlKSBvbiB0aGUgTWVsYW5lc2lhbiBJc2xhbmQgb2YgVmFudWF0dTsgKGl2KSBGYW50ZSBpbiBHaGFuYTsgYW5kICh2KSBBbWVyaWNhbiBFbmdsaXNoIGluIHRoZSBCYXkgQXJlYSwgQ2FsaWZvcm5pYS4gCj4gCj4gV2UgdGh1cyBoYXZlIGZpdmUgbW9yZSBzcGVjaWZpYyBzdWItaHlwb3RoZXNlcy4gRm9yIGVhY2ggb2YgdGhlIGZpcnN0IGZvdXIgbGFuZ3VhZ2VzIC8gcmVnaW9ucyBvZiBpbnRlcmVzdCwgd2UgaHlwb3RoZXNpemUgdGhhdCBhIHNldCBvZiB3b3JkcyBvciBwaHJhc2VzIGV4aXN0cyB3aG9zZSB1c2FnZSBwYXJhbGxlbHMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB1c2FnZSBvZiDigJx0aGlua+KAnSBhbmQg4oCcYmVsaWV2ZeKAnSBpbiBBbWVyaWNhbiBFbmdsaXNoLCB3aXRoIG9uZSB3b3JkIG9yIHBocmFzZSAodGhlIOKAnHRoaW5r4oCdIGFuYWxvZ3VlKSBiZWluZyB1c2VkIGZvciBtb3JlIG1hdHRlci1vZi1mYWN0IGF0dGl0dWRlIHJlcG9ydHMgYW5kIHRoZSBvdGhlciAodGhlIOKAnGJlbGlldmXigJ0gYW5hbG9ndWUpIGJlaW5nIG1vcmUgbGlrZWx5IHRvIGJlIHVzZWQgZm9yIHJlbGlnaW91cyBhdHRpdHVkZSByZXBvcnRzLiBUaGF0IGdpdmVzIHVzIG91ciBmaXJzdCBmb3VyIHN1Yi1oeXBvdGhlc2VzOiB0aGF0IE1hbmRhcmluLCBUaGFpLCBCaXNsYW1hIGFuZCBGYW50ZSBzcGVha2VycyB3aWxsIGVhY2ggdXNlIHR3byBkaWZmZXJlbnQgd29yZHMgaW4gYSBtYW5uZXIgcGFyYWxsZWwgdG8gdGhlIHVzZSBvZgrigJx0aGlua+KAnSBhbmQg4oCcYmVsaWV2ZeKAnSBpbiBhbiBBbWVyaWNhbiBFbmdsaXNoIHNldHRpbmcgYXMgaWRlbnRpZmllZCBieSBIZWlwaGV0eiwgTGFuZGVycywgYW5kIFZhbiBMZWV1d2VuLiBPdXIgZmlmdGggc3ViLWh5cG90aGVzaXMgaXMgdGhhdCB0aGUgQmF5IEFyZWEgcG9ydGlvbiBvZiB0aGUgc3R1ZHkgd2lsbCByZXBsaWNhdGUgdGhlIHJlc3VsdHMgb2YgdGhlIGVhcmxpZXIgc3R1ZHkgb2YgSGVpcGhldHosIExhbmRlcnMsIGFuZCBWYW4gTGVldXdlbi4iCgoKPHAgc3R5bGU9ImNvbG9yOmRhcmtyZWQiPioqS1cgRVhFQ1VUSVZFIFNVTU1BUlkgKDIwMjAtMDEtMjApOiBXZSByZXBsaWNhdGVkIHRoZSBvcmlnaW5hbCBmaW5kaW5nIGluIHRoZSBVUyAoYW5kIHRoZSBmaW5kaW5ncyBvZiBUaGluayBCZWxpZXZlIDEpOiBwYXJ0aWNpcGFudHMgd2VyZSBtb3JlIGxpa2VseSB0byB3cml0ZSBpbiAiYmVsaWV2ZSIgZm9yIHJlbGlnaW91cyB0aGFuIGZhY3QgcXVlc3Rpb25zLiBXZSBmb3VuZCB0aGUgc2FtZSBwYXR0ZXJuIGluIGFsbCBmaXZlIGNvdW50cmllcy9sYW5nYXVnZXMgaW5jbHVkZWQgaW4gdGhpcyBzdHVkeS4qKjwvcD4KCjxwIHN0eWxlPSJjb2xvcjpkYXJrcmVkIj4qKkFzIGluIFRoaW5rIEJlbGlldmUgMSwgdGhlIHBhdHRlcm4gd2FzIHNvbWV3aGF0IHdlYWtlciBpbiBHaGFuYS9GYW50ZSB0aGFuIGluIG90aGVyIGNvdW50cmllcy9sYW5ndWFnZXMuIEluIFRoaW5rIEJlbGlldmUgMSwgdGhlIHBhdHRlcm4gd2FzIHN0cm9uZ2VyIGluIFRoYWlsYW5kL1RoYWkgKGFuZCBubyBzdHJvbmdlciBvciB3ZWFrZXIgaW4gQ2hpbmEvTWFuZGFyaW4gb3IgVmFudWF0dS9CaXNsYW1hKTsgaW4gY29udHJhc3QsIGluIHRoaXMgc3R1ZHkgaXQgd2FzIHN0cm9uZ2VyIGluIENoaW5hL01hbmRhcmluLCB3ZWFrZXIgaW4gVmFudWF0dS9CaXNsYW1hLCBhbmQgbm8gc3Ryb25nZXIgb3Igd2Vha2VyIFRoYWlsYW5kL1RoYWkuIEkgc3VzcGVjdCB0aGVzZSBwYXR0ZXJucyBhcmUgbGFyZ2VseSBhY2NvdW50ZWQgZm9yIGJ5IHRoZSBmYWN0IHRoYXQgc28gZmV3IHBhcnRpY2lwYW50cyBpbiBHaGFuYSBhbmQgZXNwZWNpYWxseSBWYW51YXR1IHNwb250YW5lb3VzbHkgdXNlZCB0aGUgd29yZCAiYmVsaWV2ZSIgaW4gdGhlaXIgZnJlZSByZXNwb25zZXMuKio8L3A+CgoKIyBTYW1wbGVzCgpCZWZvcmUgd2UgYmVnaW4sIGl0J3MgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB3ZSBoYWQgdW5lcXVhbCBzYW1wbGUgc2l6ZXMgYnkgY291bnRyeToKCmBgYHtyfQpkMl9yYXcgJT4lIGNvdW50KHRoYjJfY3RyeSkKYGBgCgpIb3dldmVyLCBgciBkMl9yYXcgJT4lIGZpbHRlcih0aGIyX29yZHIgPT0gIk5vIikgJT4lIGNvdW50KCkgJT4lIGFzLm51bWVyaWMoKWAgcGFydGljaXBhbnRzIGNvbXBsZXRlZCB0aGlzIHRhc2sgYWZ0ZXIgY29tcGxldGluZyBvdGhlciBzdXJ2ZXlzLCBhbmQgYW4gYWRkaXRpb25hbCBgciBkMl9yYXcgJT4lIGZpbHRlcih0aGIyX29yZHIgPT0gIlllcyIsIHRoYjJfYXR0biA9PSAiRmFpbCIpICU+JSBjb3VudCgpICU+JSBhcy5udW1lcmljKClgIGZhaWxlZCB0aGUgYXR0ZW50aW9uIGNoZWNrLiBJbiB0aGUgZm9sbG93aW5nIGFuYWx5c2VzIEkgd2lsbCBleGNsdWRlIHRoZXNlIHBhcnRpY2lwYW50cywgbGVhdmluZyB1cyB3aXRoIHRoZSBmb2xsb3dpbmcgc2FtcGxlczoKCmBgYHtyfQpkMiAlPiUgY291bnQoY291bnRyeSkKYGBgCgpgYGB7cn0Kc2FtcGxlX3NpemVfZDIgPC0gZDIgJT4lIAogIGNvdW50KGNvdW50cnkpICU+JSAKICBkYXRhLmZyYW1lKCkgJT4lCiAgbXV0YXRlKGNvdW50cnlfbiA9IHBhc3RlMChjb3VudHJ5LCAiIChuPSIsIG4sICIpIiksCiAgICAgICAgIGNvdW50cnlfbiA9IHJlb3JkZXIoY291bnRyeV9uLCBhcy5udW1lcmljKGNvdW50cnkpKSkKYGBgCgoKIyBQbG90cwoKV2UnbGwgYmVnaW4gYnkgcGxvdHRpbmcgcmVzcG9uc2VzIG9mICJ0aGluayhzKS90aG91Z2h0IiAocmVkKSB2cy4gImJlbGlldmUocykvYmVsaWV2ZWQiICh0dXJxdW9pc2UpIHZzLiBvdGhlciByZXNwb25zZXMgKGdyYXkpIHRvIGdldCBhbiBvdmVyYWxsIHNlbnNlIG9mIGFueSBwYXR0ZXJucyBpbiB0aGUgZGF0YS4KCmBgYHtyfQp0aHJlZV9jb2xzIDwtIGMoImdyYXkiLCBnZ19jb2xvcl9odWUoMikpCmBgYAoKIyMgQnkgc3VwZXJvcmRpbmF0ZSBjYXRlZ29yeQoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAwLjV9CmQyX2xvbmcgJT4lCiAgbGVmdF9qb2luKHNhbXBsZV9zaXplX2QyKSAlPiUKICAjIGdncGxvdChhZXMoeCA9IHN1cGVyX2NhdCwgZmlsbCA9IHJlc3BvbnNlX2NhdDMpKSArCiAgZ2dwbG90KGFlcyh4ID0gc3VwZXJfY2F0LCBmaWxsID0gcmVzcG9uc2VYX2NhdDMpKSArICMgaW5jbHVkZXMgImRvZXMgbm90IFgiLCAiW2FkdmVyYl0gWCIKICBmYWNldF9ncmlkKC4gfiBjb3VudHJ5X24sIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIiwgYWxwaGEgPSAwLjcsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMSkgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gdGhyZWVfY29scykgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogIGxhYnMoeCA9ICJjYXRlZ29yeSIsIHkgPSAicHJvcG9ydGlvbiIsIGZpbGwgPSAicmVzcG9uc2UiKQpgYGAKCiMjIEJ5IGNhdGVnb3J5CgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuNX0KZDJfbG9uZyAlPiUKICBsZWZ0X2pvaW4oc2FtcGxlX3NpemVfZDIpICU+JQogICMgZ2dwbG90KGFlcyh4ID0gY2F0ZWdvcnksIGZpbGwgPSByZXNwb25zZV9jYXQzKSkgKwogIGdncGxvdChhZXMoeCA9IGNhdGVnb3J5LCBmaWxsID0gcmVzcG9uc2VYX2NhdDMpKSArICMgaW5jbHVkZXMgImRvZXMgbm90IFgiLCAiW2FkdmVyYl0gWCIKICBmYWNldF9ncmlkKC4gfiBjb3VudHJ5X24sIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIiwgYWxwaGEgPSAwLjcsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMSkgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gdGhyZWVfY29scykgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogIGxhYnMoeCA9ICJjYXRlZ29yeSIsIHkgPSAicHJvcG9ydGlvbiIsIGZpbGwgPSAicmVzcG9uc2UiKQpgYGAKCiMjIEJ5IHF1ZXN0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuN30KZDJfbG9uZyAlPiUKICBsZWZ0X2pvaW4oc2FtcGxlX3NpemVfZDIpICU+JQogICMgZ2dwbG90KGFlcyh4ID0gcmVvcmRlcihzdHJfd3JhcChxdWVzdGlvbl90ZXh0X3Nob3J0LCA0MCksIG9yZGVyKSwgCiAgIyAgICAgICAgICAgIGZpbGwgPSByZXNwb25zZV9jYXQzKSkgKwogIGdncGxvdChhZXMoeCA9IHJlb3JkZXIoc3RyX3dyYXAocXVlc3Rpb25fdGV4dF9zaG9ydCwgNDApLCBvcmRlciksIAogICAgICAgICAgICAgZmlsbCA9IHJlc3BvbnNlWF9jYXQzKSkgKyAjIGluY2x1ZGVzICJkb2VzIG5vdCBYIiwgIlthZHZlcmJdIFgiCiAgZmFjZXRfZ3JpZChjb3VudHJ5X24gfiBjYXRlZ29yeSwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiLCBhbHBoYSA9IDAuNywgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMC4xKSArCiAgIyBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUsIGx0eSA9IDIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSB0aHJlZV9jb2xzKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiLAogICAgICAgIHBsb3QubWFyZ2luID0gKHVuaXQoYygwLjIsIDAuMiwgMC4yLCAxLjgpLCAiY20iKSkpICsKICBsYWJzKHggPSAiY2F0ZWdvcnkiLCB5ID0gInByb3BvcnRpb24iLCBmaWxsID0gInJlc3BvbnNlIikKYGBgCgoKIyBBbmFseXNpczogS1cgd2l0aG91dCBsb29raW5nIGF0IHByZXJlZ2lzdHJhdGlvbgoKVGhlc2UgYW5hbHlzZXMgZGlyZWN0bHkgcGFyYWxsZWwgdGhlIHdheSBJIGFuYWx5emVkIHRoZSBUaGluayBCZWxpZXZlIDEgZGF0YSBiZWZvcmUgbG9va2luZyBhdCB0aGUgcHJlcmVnaXN0cmF0aW9uLiBBZ2FpbiwgSSB0aGluayB0aGVzZSBhbmFseXNlcyBhcmUgdmFsdWFibGUgYmVjYXVzZSB0aGV5J3JlIGEgbGl0dGxlIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIHByZXJlZ2lzdGVyZWQgYW5hbHlzZXMgLS0gbm8gbmVlZCBmb3IgZm9sbG93LXVwIHRlc3RzIC0tIGFuZCB0aGV5IGRpcmVjdGx5IHRlc3QgdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgdGhlIGVmZmVjdCBvZiBpbnRlcmVzdCB2YXJpZXMgYWNyb3NzIGNvdW50cmllcy9sYW5nYXVnZXMuCgpBcyBvZiAyMDIwLTAxLTIyLCBJJ20gbm93IHVzaW5nIHRoZSBtb3JlIGxlbmllbnQgImJlbGlldmVcKiIgdmFyaWFibGUgaW4gdGhlc2UgYW5hbHlzZXMuCgpUZWNobmljYWwgbm90ZTogVW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2UsIGFsbCBvZiB0aGVzZSBhbmFseXNlcyB1c2UgImVmZmVjdCBjb2RpbmciIGZvciBjYXRlZ29yaWNhbCB2YXJpYWJsZXMgKGUuZy4sIGNvdW50cnksIGNhdGVnb3J5IG9mIHF1ZXN0aW9uKSAtLSBtZWFuaW5nIHRoYXQgZWFjaCBjb3VudHJ5L2xhbmdhdWdlIGlzIGNvbXBhcmVkIHRvIHRoZSAiZ3JhbmQgbWVhbiIgY29sbGFwc2luZyBhY3Jvc3MgYWxsIGNvdW50cmllcy9sYW5ndWFnZXMuIEJlY2F1c2Ugb2YgZGVncmVlcyBvZiBmcmVlZG9tIGlzc3VlcywgZWFjaCBhbmFseXNpcyBvbmx5IGNvbXBhcmVzIDQgb2YgdGhlIDUgY291bnRyaWVzIHRvIHRoZSBncmFuZCBtZWFuIC0tIGJ5IGRlZmF1bHQsIEkndmUgbGVmdCBvdXQgdGhlIGNvbXBhcmlzb24gb2YgdGhlIFVTL0VuZ2xpc2ggdG8gdGhlIGdyYW5kIG1lYW4sIGJ1dCBzdGF0cyBmb3IgdGhhdCBjb21wYXJpc29uIGNvdWxkIGVhc2lseSBiZSBjYWxjdWxhdGVkIChpZiB3ZSBsZWZ0IG91dCBhbm90aGVyIGNvdW50cnkvbGFuZ3VhZ2UgaW5zdGVhZCkuIFRoaXMgaXMganVzdCB0byBzYXkgdGhhdCB5b3Ugd29uJ3Qgc2VlIHN0YXRlbWVudHMgbGlrZSAiVGhlIGVmZmVjdCB3YXMgZXhhZ2dlcmF0ZWQgaW4gdGhlIFVTIHJlbGF0aXZlIHRvIG90aGVyIGNvdW50cmllcywiIGFsdGhvdWdoIHRoZXkgbWlnaHQgYmUgdHJ1ZS4KCiMjIEtXIEFuYWx5c2lzICMxCgpGaXJzdCwgSSB1c2VkIGEgbWl4ZWQgZWZmZWN0cyBsb2dpc3RpYyByZWdyZXNzaW9uIHByZWRpY3RpbmcgaG93IGxpa2VseSBhIHBhcnRpY2lwYW50IHdhcyB0byB3cml0ZSAiYmVsaWV2ZSIgYmFzZWQgb24gdGhlIHN1cGVyb3JkaW5hdGUgY2F0ZWdvcnkgb2YgdGhlIHF1ZXN0aW9uICgicmVsaWdpb3VzIiBxdWVzdGlvbnMgb3IgImZhY3QiIHF1ZXN0aW9ucyksIHRoZSBjb3VudHJ5IHRoZXkgd2VyZSBpbi9sYW5ndWFnZSB0aGV5IHdlcmUgdXNpbmcgKFVTL0VuZ2xpc2gsIEdoYW5hL0ZhbnRlLCBUaGFpbGFuZC9UaGFpLCBDaGluYS9NYW5kYXJpbiwgb3IgVmFudWF0dS9CaXNsYW1hKSwgYW5kIGFuIGludGVyYWN0aW9uIGJldHdlZW4gdGhlbSwgd2l0aCBhIG1heGltYWwgcmFuZG9tIGVmZmVjdHMgc3RydWN0dXJlIChyYW5kb20gaW50ZXJwY2VwdHMgYW5kIHNsb3BlcyBieSBzdWJqZWN0LCBhbmQgcmFuZG9tIGludGVyY2VwdHMgYnkgcXVlc3Rpb24pLiBUaGlzIGFuYWx5c2lzIGdpdmVzIG1lIGEgc2Vuc2Ugb2YgKDEpIFdoZXRoZXIgcGFydGljaXBhbnRzIHdlcmUgbW9yZSBsaWtlbHkgdG8gd3JpdGUgImJlbGlldmUiIGZvciByZWxpZ2lvdXMgcXVlc3Rpb25zIHRoYW4gZmFjdCBxdWVzdGlvbnMsIGFuZCB3aGV0aGVyIHRoaXMgdGVuZGVuY3kgdmFyaWVkIGJ5IGNvdW50cnkvbGFuZ3VhZ2UsIGNvbnRyb2xsaW5nIGZvciB0aGUgZmFjdCB0aGF0IHRoZSBvdmVyYWxsIHJhdGVzIG9mIGNpcmNsaW5nICJiZWxpZXZlIiBtaWdodCB2YXJ5IGJ5IGNvdW50cnkvbGFuZ3VhZ2UgKGFuZCBhY2NvdW50aW5nIGZvciBpbmRpdmlkdWFsIGRpZmZlcmVuY2VzIGFuZCBkaWZmZXJlbmNlcyBhY3Jvc3MgaW5kaXZpZHVhbCBxdWVzdGlvbnMpLgoKTm90ZSB0aGF0IHRoaXMgYW5hbHlzaXMgdHJlYXRzIHJlc3BvbnNlcyBvZiAidGhpbmsiIGFzIHRoZSBzYW1lIGFzIGFueSBvdGhlciBub24tImJlbGlldmUiIHJlc3BvbnNlIC0tIEknbSBqdXN0IHRyeWluZyB0byBwcmVkaWN0IGhvdyBsaWtleSB0aGUgcGFydGljaXBhbnQgd2FzIHRvIHdyaXRlIGluICJiZWxpZXZlLiIKCmBgYHtyLCBlY2hvID0gVH0KcjIuMSA8LSBsbWVyKGJlbGlldmVYIH4gc3VwZXJfY2F0ICogY291bnRyeSAKICAgICAgICAgICAgICsgKDEgKyBzdXBlcl9jYXQgfCB0aGIyX3N1YmopICsgKDEgfCBxdWVzdGlvbiksIAogICAgICAgICAgICAgIyArICgxICsgc3VwZXJfY2F0IHx8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwgCiAgICAgICAgICAgICAjICsgKDEgKyBzdXBlcl9jYXQgfCB0aGIyX3N1YmopLCAKICAgICAgICAgICAgICMgKyAoMSArIHN1cGVyX2NhdCB8fCB0aGIyX3N1YmopLCAKICAgICAgICAgICAgICMgKyAoMSB8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwgCiAgICAgICAgICAgICBkYXRhID0gZDJfbG9uZykKYGBgCgpgYGB7cn0KcmVndGFiX2Z1bihyMi4xLCBzdGRfYmV0YSA9IFQpICU+JSByZWd0YWJfc3R5bGVfZnVuKHJvd19lbXBoID0gYygyLCA3OjEwKSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CnJlZ3RhYl9yYW5fZnVuKHIyLjEsIHN1YmpfdmFyID0gInRoYjJfc3ViaiIpICU+JSByZWd0YWJfc3R5bGVfZnVuKCkKYGBgCgpUaGUgZWZmZWN0cyBvZiBwcmltYXJ5IGludGVyZXN0IGFyZSBpbiBib2xkOgoKLSAqKkNhdGVnb3J5IChyZWxpZ2lvdXMpKio6IENvbGxhcHNpbmcgYWNyb3NzIGNvdW50cmllcy9sYW5ndWFnZXMsIHBhcnRpY2lwYW50cyB3ZXJlIGluZGVlZCBtb3JlIGxpa2VseSB0byBzYXkgImJlbGlldmUiIGZvciAicmVsaWdpb3VzIiBxdWVzdGlvbnMsIGVjaG9pbmcgdGhlIGZvcmNlZCBjaG9pY2UgcmVzdWx0cyBvZiBUaGluayBCZWxpZXZlIDEuCi0gQ291bnRyeSAoR2guKTogUGFydGljaXBhbnRzIGluIEdoYW5hIHdlcmUgZ2VuZXJhbGx5IGxlc3MgbGlrZWx5IHRoYW4gb3RoZXIgcGFydGljaXBhbnRzIHRvIHNheSAiYmVsaWV2ZSwiIGNvbGxhcHNpbmcgYWNyb3NzIHF1ZXN0aW9uIGNhdGVnb3JpZXMuIChUaGlzIGlzIGluIGNvbnRyYXN0IHRvIFRoaW5rIEJlbGlldmUgMSwgaW4gd2hpY2ggdGhleSB3ZXJlIG1vcmUgbGlrZWx5IHRvIGNpcmNsZSAiYmVsaWV2ZS4iKQotIENvdW50cnkgKFRoLik6IFBhcnRpY2lwYW50cyBpbiBUaGFpbGFuZCB3ZXJlIG5vIG1vcmUgb3IgbGVzcyBsaWtlbHkgdGhhbiBvdGhlciBwYXJ0aWNpcGFudHMgdG8gc2F5ICJiZWxpZXZlLCIgY29sbGFwc2luZyBhY3Jvc3MgcXVlc3Rpb24gY2F0ZWdvcmllcy4gKFRoaXMgaXMgaW4gY29udHJhc3QgdG8gVGhpbmsgQmVsaWV2ZSAxLCBpbiB3aGljaCB0aGV5IHdlcmUgbGVzcyBsaWtlbHkgdG8gY2lyY2xlICJiZWxpZXZlLiIpCi0gQ291bnRyeSAoQ2guKTogUGFydGljaXBhbnRzIGluIENoaW5hIHdlcmUgbm8gbW9yZSBvciBsZXNzIGxpa2VseSB0aGFuIG90aGVyIHBhcnRpY2lwYW50cyB0byBzYXkgImJlbGlldmUsIiBjYW9sbGFwc2luZyBhY3Jvc3MgcXVlc3Rpb24gY2F0ZWdvcmllcy4gKFRoZXkgZGlkIG5vdCBkaWZmZXIgZnJvbSB0aGUgZ3JhbmQgbWVhbiBpbiBUaGluayBCZWxpZXZlIDEuKQotIENvdW50cnkgKFZ0Lik6IFBhcnRpY2lwYW50cyBpbiBWYW51YXR1IHdlcmUgbm8gbW9yZSBvciBsZXNzIGxpa2VseSB0aGFuIG90aGVyIHBhcnRpY2lwYW50cyB0byBzYXkgImJlbGlldmUsIiBjb2xsYXBzaW5nIGFjcm9zcyBxdWVzdGlvbiBjYXRlZ29yaWVzLiAoVGhleSBkaWQgbm90IGRpZmZlciBmcm9tIHRoZSBncmFuZCBtZWFuIGluIFRoaW5rIEJlbGlldmUgMS4pCi0gKipDYXRlZ29yeSAocmVsaWdpb3VzKSB4IENvdW50cnkgKEdoLikqKjogVGhlIGRpZmZlcmVuY2UgaW4gcmF0ZXMgb2YgImJlbGlldmUiIHJlc3BvbnNlcyBiZXR3ZWVuIHF1ZXN0aW9uIGNhdGVnb3JpZXMgd2FzIHNtYWxsZXIgaW4gR2hhbmEgdGhhbiBpbiBvdGhlciBjb3VudHJpZXMsIGVjaG9pbmcgdGhlIGZvcmNlZCBjaG9pY2UgcmVzdWx0cyBvZiBUaGluayBCZWxpZXZlIDEuIAotICoqQ2F0ZWdvcnkgKHJlbGlnaW91cykgeCBDb3VudHJ5IChUaC4pKio6IFRoZSBkaWZmZXJlbmNlIGluIHJhdGVzIG9mICJiZWxpZXZlIiByZXNwb25zZXMgYmV0d2VlbiBxdWVzdGlvbiBjYXRlZ29yaWVzIHdhcyBubyBzbWFsbGVyIG9yIGxhcmdlciBpbiBUaGFpbGFuZCB0aGFuIGluIG90aGVyIGNvdW50cmllcy4gKEluIFRoaW5rIEJlbGlldmUgMSwgdGhlIGRpZmZlcmVuY2Ugd2FzIGV4YWdnZXJhdGVkIGluIFRoYWlsYW5kLikKLSAqKkNhdGVnb3J5IChyZWxpZ2lvdXMpIHggQ291bnRyeSAoQ2guKSoqOiBUaGUgZGlmZmVyZW5jZSBpbiByYXRlcyBvZiAiYmVsaWV2ZSIgcmVzcG9uc2VzIGJldHdlZW4gcXVlc3Rpb24gY2F0ZWdvcmllcyB3YXMgbGFyZ2VyIGluIENoaW5hIHRoYW4gaW4gb3RoZXIgY291bnRyaWVzLiAoSW4gVGhpbmsgQmVsaWV2ZSAxLCB0aGlzIGRpZmZlcmVuY2UgZGlkIG5vdCBkaWZmZXIgZnJvbSB0aGUgZGlmZmVyZW5jZSBpbiBvdGhlciBjb3VudHJpZXMuKQotICoqQ2F0ZWdvcnkgKHJlbGlnaW91cykgeCBDb3VudHJ5IChWdC4pKio6IFRoZSBkaWZmZXJlbmNlIGluIHJhdGVzIG9mICJiZWxpZXZlIiByZXNwb25zZXMgYmV0d2VlbiBxdWVzdGlvbiBjYXRlZ29yaWVzIHdhcyBzbWFsbGVyIGluIFZhbnVhdHUgdGhhbiBpbiBvdGhlciBjb3VudHJpZXMuIChJbiBUaGluayBCZWxpZXZlIDEsIHRoaXMgZGlmZmVyZW5jZSBkaWQgbm90IGRpZmZlciBmcm9tIHRoZSBkaWZmZXJlbmNlIGluIG90aGVyIGNvdW50cmllcy4pCgoqKlRha2UtYXdheTogVGhlIHByZWRpY3RlZCBlZmZlY3QgaXMgZXZpZGVudCBpbiB0aGlzIGRhdGFzZXQsIGFzIGl0IHdhcyBpbiBUaGluayBCZWxpZXZlIDEuIEl0IGFwcGVhcnMgdG8gYmUgZXhhZ2dlcmF0ZWQgaW4gQ2hpbmEgYW5kIGRpbWluaXNoZWQgaW4gR2hhbmEgYW5kIFZhbnVhdHUsIGEgcGF0dGVybiB3aGljaCBkaWZmZXJzIGZyb20gVGhpbmsgQmVsaWV2ZSAxLioqCgojIyBLVyBBbmFseXNlcyAjMWEtMWUgKGJ5IGNvdW50cnkpCgpOZXh0LCBJIGRpZCB0aGlzIHNhbWUgYW5hbHlzaXMgd2l0aGluIGVhY2ggY291bnRyeS9sYW5nYXVnZSBhbG9uZSAodXNpbmcgdGhlIG1vc3QgbWF4aW1hbCByYW5kb20gZWZmZWN0IHN0cnVjdHVyZSB0aGF0IGNvbnZlcmdlZCBhY3Jvc3MgYWxsIGNvdW50cmllcy9sYW5ndWFnZXMpLiAKCmBgYHtyLCBlY2hvID0gVH0KIyBub3RlOiB1c2luZyBtb3N0IG1heGltYWwgY29tbW9uIHJhbmRvbSBlZmZlY3RzIHN0cnVjdHVyZQpyMi4xX3VzIDwtIGxtZXIoYmVsaWV2ZVggfiBzdXBlcl9jYXQgKyAKICAgICAgICAgICAgICAgICAgIyAoMSArIHN1cGVyX2NhdCB8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwKICAgICAgICAgICAgICAgICAgIyAoMSArIHN1cGVyX2NhdCB8fCB0aGIyX3N1YmopICsgKDEgfCBxdWVzdGlvbiksCiAgICAgICAgICAgICAgICAgICMgKDEgfCB0aGIyX3N1YmopICsgKDEgfCBxdWVzdGlvbiksCiAgICAgICAgICAgICAgICAgICgxICsgc3VwZXJfY2F0IHwgdGhiMl9zdWJqKSwKICAgICAgICAgICAgICAgICAgIyAoMSArIHN1cGVyX2NhdCB8fCB0aGIyX3N1YmopLAogICAgICAgICAgICAgICAgICAjICgxIHwgdGhiMl9zdWJqKSwKICAgICAgICAgICAgICAgIGRhdGEgPSBkMl9sb25nICU+JSBmaWx0ZXIoY291bnRyeSA9PSAiVVMiKSkKCnIyLjFfZ2ggPC0gbG1lcihiZWxpZXZlWCB+IHN1cGVyX2NhdCArIAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHwgdGhiMl9zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHx8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwKICAgICAgICAgICAgICAgICAgIyAoMSB8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwKICAgICAgICAgICAgICAgICAgKDEgKyBzdXBlcl9jYXQgfCB0aGIyX3N1YmopLAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHx8IHRoYjJfc3ViaiksIAogICAgICAgICAgICAgICAgICAjICgxIHwgdGhiMl9zdWJqKSwKICAgICAgICAgICAgICAgIGRhdGEgPSBkMl9sb25nICU+JSBmaWx0ZXIoY291bnRyeSA9PSAiR2hhbmEiKSkKCnIyLjFfdGggPC0gbG1lcihiZWxpZXZlWCB+IHN1cGVyX2NhdCArIAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHwgdGhiMl9zdWJqKSArICgxIHwgcXVlc3Rpb24pLCAjIGZhaWxlZCB0byBjb252ZXJnZQogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHx8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwgIyBmYWlsZWQgdG8gY29udmVyZ2UKICAgICAgICAgICAgICAgICAgKDEgfCB0aGIyX3N1YmopICsgKDEgfCBxdWVzdGlvbiksCiAgICAgICAgICAgICAgICAgICMgKDEgKyBzdXBlcl9jYXQgfCB0aGIyX3N1YmopLAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHx8IHRoYjJfc3ViaiksIAogICAgICAgICAgICAgICAgICAjICgxIHwgdGhiMl9zdWJqKSwKICAgICAgICAgICAgICAgIGRhdGEgPSBkMl9sb25nICU+JSBmaWx0ZXIoY291bnRyeSA9PSAiVGhhaWxhbmQiKSkKCnIyLjFfY2ggPC0gbG1lcihiZWxpZXZlWCB+IHN1cGVyX2NhdCArIAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHwgdGhiMl9zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHx8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwKICAgICAgICAgICAgICAgICAgIyAoMSB8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwgIyBmYWlsZWQgdG8gY29udmVyZ2UKICAgICAgICAgICAgICAgICAgKDEgKyBzdXBlcl9jYXQgfCB0aGIyX3N1YmopLAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHx8IHRoYjJfc3ViaiksIAogICAgICAgICAgICAgICAgICAjICgxIHwgdGhiMl9zdWJqKSwKICAgICAgICAgICAgICAgIGRhdGEgPSBkMl9sb25nICU+JSBmaWx0ZXIoY291bnRyeSA9PSAiQ2hpbmEiKSkKCnIyLjFfdnQgPC0gbG1lcihiZWxpZXZlWCB+IHN1cGVyX2NhdCArIAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHwgdGhiMl9zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHx8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwKICAgICAgICAgICAgICAgICAgIyAoMSB8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwKICAgICAgICAgICAgICAgICAgKDEgKyBzdXBlcl9jYXQgfCB0aGIyX3N1YmopLAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHx8IHRoYjJfc3ViaiksIAogICAgICAgICAgICAgICAgICAjICgxIHwgdGhiMl9zdWJqKSwKICAgICAgICAgICAgICAgIGRhdGEgPSBkMl9sb25nICU+JSBmaWx0ZXIoY291bnRyeSA9PSAiVmFudWF0dSIpKQpgYGAKCmBgYHtyfQpiaW5kX3Jvd3MocmVndGFiX2Z1bihyMi4xX3VzKSAlPiUgbXV0YXRlKENvdW50cnkgPSAiVVMiKSwKICAgICAgICAgIHJlZ3RhYl9mdW4ocjIuMV9naCkgJT4lIG11dGF0ZShDb3VudHJ5ID0gIkdoYW5hIiksCiAgICAgICAgICByZWd0YWJfZnVuKHIyLjFfdGgpICU+JSBtdXRhdGUoQ291bnRyeSA9ICJUaGFpbGFuZCIpLAogICAgICAgICAgcmVndGFiX2Z1bihyMi4xX2NoKSAlPiUgbXV0YXRlKENvdW50cnkgPSAiQ2hpbmEiKSwKICAgICAgICAgIHJlZ3RhYl9mdW4ocjIuMV92dCkgJT4lIG11dGF0ZShDb3VudHJ5ID0gIlZhbnVhdHUiKSkgJT4lCiAgc2VsZWN0KENvdW50cnksIGV2ZXJ5dGhpbmcoKSkgJT4lCiAgcmVndGFiX3N0eWxlX2Z1bihyb3dfZW1waCA9IHNlcSgyLCAxMCwgMikpICU+JQogIGNvbGxhcHNlX3Jvd3MoMSkKYGBgCgpUaGUgZWZmZWN0cyBvZiBwcmltYXJ5IGludGVyZXN0IGFyZSBpbiBib2xkLCBhbmQgKip0aGUgdGFrZS1hd2F5IGlzIGNsZWFyOiBJbiBldmVyeSBjb3VudHJ5L2xhbmd1YWdlLCBwYXJ0aWNpcGFudHMgd2VyZSBtb3JlIGxpa2VseSB0byBzYXkgImJlbGlldmUiIGluICJyZWxpZ2lvdXMiIHF1ZXN0aW9ucyB0aGFuIGluICJmYWN0IiBxdWVzdGlvbnMqKi4KCgojIyBLVyBBbmFseXNpcyAjMgoKSW4gdGhpcyBhbmFseXNpcywgSSB0cmVhdGVkIGNvdW50cnkvbGFuZ3VhZ2UgYXMgYSByYW5kb20gcmF0aGVyIHRoYW4gZml4ZWQgZWZmZWN0ICh3aXRoIHBhcnRpY2lwYW50cyBuZXN0ZWQgd2l0aGluIGNvdW50cmllcykuIAoKYGBge3IsIGVjaG8gPSBUfQpyMi4yIDwtIGxtZXIoYmVsaWV2ZVggfiBzdXBlcl9jYXQgCiAgICAgICAgICAgICAjICsgKDEgKyBzdXBlcl9jYXQgfCBjb3VudHJ5L3RoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwgIyBmYWlsZWQgdG8gY29udmVyZ2UKICAgICAgICAgICAgICMgKyAoMSArIHN1cGVyX2NhdCB8fCBjb3VudHJ5L3RoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwgIyBmYWlsZWQgdG8gY29udmVyZ2UKICAgICAgICAgICAgICMgKyAoMSArIHN1cGVyX2NhdCB8IGNvdW50cnkvdGhiMl9zdWJqKSwgIyBmYWlsZWQgdG8gY29udmVyZ2UKICAgICAgICAgICAgICMgKyAoMSArIHN1cGVyX2NhdCB8fCBjb3VudHJ5L3RoYjJfc3ViaiksICMgZmFpbGVkIHRvIGNvbnZlcmdlCiAgICAgICAgICAgICAjICsgKDEgfCBjb3VudHJ5L3RoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwgIyBmYWlsZWQgdG8gY29udmVyZ2UKICAgICAgICAgICAgICsgKDEgfCBjb3VudHJ5L3RoYjJfc3ViaiksIAogICAgICAgICAgICAgZGF0YSA9IGQyX2xvbmcpCmBgYAoKYGBge3J9CnJlZ3RhYl9mdW4ocjIuMikgJT4lIHJlZ3RhYl9zdHlsZV9mdW4ocm93X2VtcGggPSAyKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0KcmVndGFiX3Jhbl9mdW4ocjIuMiwgc3Vial92YXIgPSAidGhiMl9zdWJqIikgJT4lIHJlZ3RhYl9zdHlsZV9mdW4oKQpgYGAKClRoZSBlZmZlY3Qgc3RpbGwgaG9sZHMuCgojIyBLVyBBbmFseXNpcyAjMwoKRmluYWxseSwgSSByYW4gYSB2ZXJzaW9uIG9mIHRoaXMgZmlyc3QgbW9kZWwgbG9va2luZyBhdCA1IGNhdGVnb3JpZXMgb2YgcXVlc3Rpb25zIChyYXRoZXIgdGhhbiAyIHN1cGVyb3JkaW5hdGUgY2F0ZWdvcmllcyk6IENocmlzdGlhbiByZWxpZ2lvdXMsIEJ1ZGRoaXN0IHJlbGlnaW91cywgd2VsbC1rbm93biBmYWN0LCBlc290ZXJpYyBmYWN0LCBhbmQgcGVyc29uYWwgZmFjdC4gSSBjb21wYXJlZCB0aGVzZSBjYXRlZ29yaWVzIHVzaW5nIHBsYW5uZWQgb3J0aG9nb25hbCBjb250cmFzdHMuIAoKYGBge3IsIGVjaG8gPSBUfQpyMi4zIDwtIGxtZXIoYmVsaWV2ZVggfiBjYXRlZ29yeSAqIGNvdW50cnkgCiAgICAgICAgICAgICArICgxICsgY2F0ZWdvcnkgfCB0aGIyX3N1YmopICsgKDEgfCBxdWVzdGlvbiksIAogICAgICAgICAgICAgIyArICgxICsgY2F0ZWdvcnkgfHwgdGhiMl9zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgIyArICgxICsgY2F0ZWdvcnkgfCB0aGIyX3N1YmopLCAKICAgICAgICAgICAgICMgKyAoMSArIGNhdGVnb3J5IHx8IHRoYjJfc3ViaiksIAogICAgICAgICAgICAgIyArICgxIHwgdGhiMl9zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgZGF0YSA9IGQyX2xvbmcpCmBgYAoKYGBge3J9CnJlZ3RhYl9mdW4ocjIuMywgCiAgICAgICAgICAgcHJlZGljdG9yX3ZhcjEgPSAiY2F0ZWdvcnlfcmVsaWdfZmFjdCIsIAogICAgICAgICAgIHByZWRpY3Rvcl9uYW1lMSA9ICJDYXRlZ29yeSAoUmVsaWdpb3VzIHZzLiBmYWN0KSIsCiAgICAgICAgICAgcHJlZGljdG9yX3ZhcjIgPSAiY2F0ZWdvcnlfcmVsaWdfQ19CIiwKICAgICAgICAgICBwcmVkaWN0b3JfbmFtZTIgPSAiQ2F0ZWdvcnkgKENocmlzdGlhbiB2cy4gQnVkZGhpc3QgcmVsaWdpb3VzKSIsCiAgICAgICAgICAgcHJlZGljdG9yX3ZhcjMgPSAiY2F0ZWdvcnlfZmFjdF9XRV9MIiwKICAgICAgICAgICBwcmVkaWN0b3JfbmFtZTMgPSAiQ2F0ZWdvcnkgKHdlbGwta25vd24gJiBlc290ZXJpYyB2cy4gcGVyc29uYWwgZmFjdCkiLAogICAgICAgICAgIHByZWRpY3Rvcl92YXI0ID0gImNhdGVnb3J5X2ZhY3RfV19FIiwKICAgICAgICAgICBwcmVkaWN0b3JfbmFtZTQgPSAiQ2F0ZWdvcnkgKHdlbGwta25vd24gdnMuIGVzb3RlcmljIGZhY3QpIikgJT4lIAogIHJlZ3RhYl9zdHlsZV9mdW4ocm93X2VtcGggPSBjKDI6NSwgMTA6MjUpKSAlPiUKICBncm91cF9yb3dzKCJJbnRlcmNlcHQiLCBzdGFydF9yb3cgPSAxLCBlbmRfcm93ID0gMSkgJT4lCiAgZ3JvdXBfcm93cygiQ2F0ZWdvcnkgY29tcGFyaXNvbnMiLCBzdGFydF9yb3cgPSAyLCBlbmRfcm93ID0gNSkgJT4lCiAgZ3JvdXBfcm93cygiQ291bnRyeSBjb21wYXJpc29ucyIsIHN0YXJ0X3JvdyA9IDYsIGVuZF9yb3cgPSA5KSAlPiUKICBncm91cF9yb3dzKCJJbnRlcmFjdGlvbnM6IEdoYW5hIiwgc3RhcnRfcm93ID0gMTAsIGVuZF9yb3cgPSAxMykgJT4lCiAgZ3JvdXBfcm93cygiSW50ZXJhY3Rpb25zOiBUaGFpbGFuZCIsIHN0YXJ0X3JvdyA9IDE0LCBlbmRfcm93ID0gMTcpICU+JQogIGdyb3VwX3Jvd3MoIkludGVyYWN0aW9uczogQ2hpbmEiLCBzdGFydF9yb3cgPSAxOCwgZW5kX3JvdyA9IDIxKSAlPiUKICBncm91cF9yb3dzKCJJbnRlcmFjdGlvbnM6IFZhbnVhdHUiLCBzdGFydF9yb3cgPSAyMiwgZW5kX3JvdyA9IDI1KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0KcmVndGFiX3Jhbl9mdW4ocjIuMywgc3Vial92YXIgPSAidGhiMl9zdWJqIikgJT4lIHJlZ3RhYl9zdHlsZV9mdW4oKQpgYGAKClRoZSBmaXJzdCBvcnRob2dvbmFsIGNvbnRyYXN0IGNvbXBhcmVkIHRoZSB0d28gInJlbGlnaW91cyIgY2F0ZWdvcmllcyB0byB0aGUgdGhyZWUgImZhY3QiIGNhdGVnb3JpZXMgKCJDYXRlZ29yeSAoUmVsaWdvaXVzIHZzLiBmYWN0KSIpLiBUaGlzIHBhcmFsbGVscyB0aGUgcHJldmlvdXMgYW5hbHlzZXMsIGFuZCB0aGUgcmVzdWx0cyBhcmUgc2ltaWxhcjogT3ZlcmFsbCwgcGFydGljaXBhbnRzIHdlcmUgbW9yZSBsaWtlbHkgdG8gd3JpdGUgImJlbGlldmUiIGZvciByZWxpZ2lvdXMgcXVlc3Rpb25zIHRoYW4gZmFjdCBxdWVzdGlvbnMsIGFuZCB0aGlzIHRlbmRlbmN5IHdhcyBkaW1pbmlzaGVkIGluIEdoYW5hIGFuZCBWYW51YXR1LCBhbmQgZXhhZ2dlcmF0ZWQgaW4gQ2hpbmEuCgpUaGUgc2Vjb25kIG9ydGhvZ29uYWwgY29udHJhc3QgY29tcGFyZWQgQ2hyaXN0aWFuIHRvIEJ1ZGRoaXN0ICJyZWxpZ2lvdXMiIHF1ZXN0aW9ucy4gT3ZlcmFsbCwgcGFydGljaXBhbnRzIHdlcmUgbW9yZSBsaWtlbHkgdG8gd3JpdGUgImJlbGlldmUiIGZvciBDaHJpc3RpYW4gcXVlc3Rpb25zLCBhbmQgdGhpcyB0ZW5kZW5jeSB3YXMgZXhhZ2dlcmF0ZWQgaW4gVmFudWF0dSBhbmQgZGltaW5pc2hlZCBpbiBUaGFpbGFuZCAocGFydGlhbGx5IGVjaG9pbmcgVGhpbmsgQmVsaWV2ZSAxKS4KClRoZSB0aGlyZCBvcnRob2dvbmFsIGNvbnRyYXN0IGNvbXBhcmVkIHdlbGwta25vd24gYW5kIGVzb3RlcmljIGZhY3RzLCBvbiB0aGUgb25lIGhhbmQsIHRvIHBlcnNvbmFsIGZhY3RzLCBvbiB0aGUgb3RoZXIuIE92ZXJhbGwsIHRoZXJlIHdhcyBubyByZWxpYWJsZSBkaWZmZXJlbmNlIGluIHJhdGVzIG9mICJiZWxpZXZlIiBiZXR3ZWVuIHRoZXNlIGdyb3VwcyBvZiBxdWVzdGlvbnMgKGluIGNvbnRyYXN0IHRvIFRoaW5rIEJlbGlldmUgMSwgaW4gd2hpY2ggcGFydGljaXBhbnRzIHdlcmUgbW9yZSBsaWtlbHkgdG8gY2lyY2xlICJiZWxpZXZlIiBmb3Igd2VsbC1rbm93biBhbmQgZXNvdGVyaWMgZmFjdHMpLiBUaGlzIGRpZmZlcmVuY2UgZGlkIG5vdCB2YXJ5IGJ5IGNvdW50cnkuCgpUaGUgZm91cnRoIG9ydGhvZ29uYWwgY29udHJhc3QgY29tcGFyZWQgd2VsbC1rbm93biB0byBlc290ZXJpYyBmYWN0cy4gIE92ZXJhbGwsIHRoZXJlIHdhcyBubyByZWxpYWJsZSBkaWZmZXJlbmNlIGluIHJhdGVzIG9mICJiZWxpZXZlIiBiZXR3ZWVuIHRoZXNlIGdyb3VwcyBvZiBxdWVzdGlvbnMgKGluIGNvbnRyYXN0IHRvIFRoaW5rIEJlbGlldmUgMSwgaW4gd2hpY2ggcGFydGljaXBhbnRzIHdlcmUgbW9yZSBsaWtlbHkgdG8gY2lyY2xlICJiZWxpZXZlIiBmb3Igd2VsbC1rbm93biBmYWN0cykuIFRoaXMgZGlmZmVyZW5jZSBkaWQgbm90IHZhcnkgYnkgY291bnRyeS4KCk5vdGUgdGhhdCB0aGVzZSBmaW5kaW5ncyBzdGF0aXN0aWNhbGx5IGNvbnRyb2wgZm9yIGRpZmZlcmVuY2VzIGFjcm9zcyBzYW1wbGVzIGluIHRoZSBvdmVyYWxsIHJhdGUgb2Ygd3JpdGluZyAiYmVsaWV2ZSIgKHdoaWNoIHdhcyBnZW5lcmFsbHkgbG93ZXIgaW4gR2hhbmEpLgoKCiMgQW5hbHlzaXM6IEJhc2VkIG9uIHByZXJlZ2lzdHJhdGlvbgoKRnJvbSBwcmVyZWdpc3RyYXRpb246Cgo+ICJTdXJ2ZXkgMTogV2Ugd2lsbCBjb25kdWN0IGEgNSAoU2l0ZTogQ2hpbmEgdnMuIFRoYWlsYW5kIHZzLiBWYW51YXR1IHZzLiBHaGFuYSB2cy4gVW5pdGVkIFN0YXRlcykgeCAyIChTdGF0ZW1lbnQgVHlwZTogcmVsaWdpb24gdnMuIGZhY3QpIG1peGVkIEFOT1ZBIHdpdGggcmVwZWF0ZWQgbWVhc3VyZXMgb24gdGhlIHNlY29uZCBmYWN0b3IgYW5kIHRoZSBwcm9wb3J0aW9uIG9mIHRyaWFscyBvbiB3aGljaCBwYXJ0aWNpcGFudHMgY29tcGxldGVkIHNlbnRlbmNlcyB1c2luZyBhIGZvcm0gdGhlIHdvcmQg4oCcYmVsaWV2ZeKAnSAob3IgaXRzIHJlc3BlY3RpdmUgdHJhbnNsYXRpb24pIGFzIHRoZSBkZXBlbmRlbnQgbWVhc3VyZS4gVG8gbG9vayBmb3IgZmluZXItZ3JhaW5lZCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGRpZmZlcmVudCByZWxpZ2lvdXMgYW5kIGZhY3R1YWwgc3RhdGVtZW50cywgd2Ugd2lsbCBhbHNvIGNvbmR1Y3QgYSA1IChTaXRlOiBDaGluYSB2cy4gVGhhaWxhbmQgdnMuIFZhbnVhdHUgdnMuIEdoYW5hIHZzLiBVbml0ZWQgU3RhdGVzKSB4IDUgKFN0YXRlbWVudCBUeXBlOiBCdWRkaGlzdCByZWxpZ2lvdXMgc3RhdGVtZW50cyB2cy4gQ2hyaXN0aWFuIHJlbGlnaW91cyBzdGF0ZW1lbnRzIHZzLiBsaWZlIGZhY3RzIHZzLiB3ZWxsLWtub3duIGZhY3RzIHZzLiBlc290ZXJpYyBmYWN0cykgbWl4ZWQgQU5PVkEgd2l0aCByZXBlYXRlZCBtZWFzdXJlcyBvbiB0aGUgc2Vjb25kIGZhY3RvciBhbmQgdGhlIHByb3BvcnRpb24gb2YgdHJpYWxzIG9uIHdoaWNoIHBhcnRpY2lwYW50cyBjb21wbGV0ZWQgc2VudGVuY2VzIHVzaW5nIGEgZm9ybSBvZiB0aGUgd29yZCDigJxiZWxpZXZl4oCdIChvciBpdHMgcmVzcGVjdGl2ZSB0cmFuc2xhdGlvbikgYXMgdGhlIGRlcGVuZGVudCBtZWFzdXJlLiBJbiBhbGwgY2FzZXMgd2hlcmUgb21uaWJ1cyBBTk9WQXMgYXJlIHNpZ25pZmljYW50LCB3ZSB3aWxsIGNvbmR1Y3QgcGFpcndpc2UgYW5hbHlzZXMgY29tcGFyaW5nIGVhY2ggc3RhdGVtZW50IHR5cGUgd2l0aCBlYWNoIG90aGVyIHN0YXRlbWVudCB0eXBlIGFuZCBlYWNoIHNpdGUgd2l0aCBlYWNoIG90aGVyIHNpdGUuIgoKYGBge3IsIGVjaG8gPSBUfQpkMl9hbm92YSA8LSBkMl9sb25nICU+JQogIGRpc3RpbmN0KHRoYjJfc3ViaiwgY291bnRyeSwgc3VwZXJfY2F0LCBxdWVzdGlvbiwgYmVsaWV2ZVgpICU+JQogIGdyb3VwX2J5KHRoYjJfc3ViaiwgY291bnRyeSwgc3VwZXJfY2F0KSAlPiUKICBzdW1tYXJpc2UocHJvcF9iZWxpZXZlWCA9IG1lYW4oYmVsaWV2ZVgpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKHRoYjJfc3ViaiA9IGZhY3Rvcih0aGIyX3N1YmopKQoKY29udHJhc3RzKGQyX2Fub3ZhJGNvdW50cnkpIDwtIGNvbnRyYXN0X2NvdW50cnkKY29udHJhc3RzKGQyX2Fub3ZhJHN1cGVyX2NhdCkgPC0gY29udHJhc3Rfc3VwZXJfY2F0CmBgYAoKIyMgUHJlcmVnIEFuYWx5c2lzICMxCgpIZXJlIGlzIHRoZSBmaXJzdCBwcmVyZWdpc3RlcmVkIGFuYWx5aXM6IGEgNSAoY291bnRyeSkgeCAyIChxdWVzdGlvbiBjYXRlZ29yeSkgbWl4ZWQgQU5PVkEgd2l0aCByZXBlYXRlZCBtZWFzdXJlcyBvbiB0aGUgc2Vjb25kIGZhY3RvciBhbmQgdGhlIHByb3BvcnRpb24gb2YgdHJpYWxzIG9uIHdoaWNoIHBhcnRpY2lwYW50cyB3cm90ZSAiYmVybGlldmUiIGFzIHRoZSBEVi4KCmBgYHtyLCBlY2hvID0gVH0KcjIuNCA8LSBkMl9hbm92YSAlPiUKICBhbm92YV90ZXN0KGR2ID0gcHJvcF9iZWxpZXZlWCwgCiAgICAgICAgICAgICB3aWQgPSB0aGIyX3N1YmosIAogICAgICAgICAgICAgYmV0d2VlbiA9IGNvdW50cnksIAogICAgICAgICAgICAgd2l0aGluID0gc3VwZXJfY2F0KQoKZ2V0X2Fub3ZhX3RhYmxlKHIyLjQpCmBgYAoKVGhpcyBhbmFseXNpcyBhbGlnbnMgd2l0aCB0aGUgcmVncmVzc2lvbnMgYWJvdmUgYW5kIHdpdGggVGhpbmsgQmVsaWV2ZSAxLCBzdWdnZXN0aW5nIHRoYXQgcGFydGljaXBhbnRzJyB0ZW5kZW5jeSB0byB3cml0ZSAiYmVsaWV2ZSIgdmFyaWVkIGJ5IGNvdW50cnkvbGFuZ3VhZ2UgKGBjb3VudHJ5YCkgYW5kIGJ5IHF1ZXN0aW9uIGNhdGVnb3J5IChgc3VwZXJfY2F0YCksIGFuZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHF1ZXN0aW9uIGNhdGVnb3J5IHZhcmllZCBhY3Jvc3MgY291bnRyaWVzL2xhbmd1YWdlcyAoaS5lLiwgdGhlcmUgd2FzIGFuIGludGVyYWN0aW9uOiBgY291bnRyeTpzdXBlcl9jYXRgKS4KClRoZSBwcmVyZWdpc3RyYXRpb24gaW5kaWNhdGVkIHRoYXQgd2UnZCBjb25kdWN0IHBhaXJ3aXNlIGZvbGxvdy11cCBhbmFseXNlcyBjb21wYXJpbmcgdGhlIHR3byBxdWVzdGlvbiBjYXRlZ29yaWVzIGFuZCBjb21wYXJpbmcgcGFpcnMgb2YgY291bnRpcmVzL2xhbmd1YWdlcyAtLSBidXQsIGFnYWluLCBJIGRvbid0IHJlYWxseSB0aGluayB3ZSdyZSBpbnRlcmVzdGVkIGluIGNvbXBhcmluZyBwYWlycyBvZiBjb3VudHJpZXMvbGFuZ3VhZ2VzLCBzbyBJJ20gZ29pbmcgdG8gc2tpcCB0aGF0IGZvciBub3cuIEluc3RlYWQsIEknbGwgY29tcGFyZSB0aGUgdHdvIHF1ZXN0aW9ucyBjYXRlZ29yaWVzIHdpdGhpbiBlYWNoIGNvdW50cnkvbGFuZ3VhZ2UgKHRvIGV4cGxvcmUgdGhlIHNpZ25pZmljYW50IGludGVyYWN0aW9uKSwgYXMgSSBkaWQgZm9yIFRoaW5rIEJlbGlldmUgMS4KCkhlcmUgd2UgZ286CgojIyMgQ29tcGFyaW5nIHF1ZXN0aW9uIGNhdGVnb3JpZXMKCmBgYHtyLCBlY2hvID0gVH0KcjIuNWEgPC0gdC50ZXN0KHByb3BfYmVsaWV2ZVggfiBzdXBlcl9jYXQsIHBhaXJlZCA9IFQsIGQyX2Fub3ZhKTsgcjIuNWEKYGBgCgpDb2xsYXBzaW5nIGFjcm9zcyBjb3VudHJpZXMvbGFuZ3VhZ2VzLCAqKnBhcnRpY2lwYW50cyB3cm90ZSBzaWduaWZpY2FudGx5IG1vcmUgImJlbGlldmUiIHJlc3BvbnNlcyBmb3IgcXVlc3Rpb25zIGluIHRoZSByZWxpZ2lvdXMgY2F0ZWdvcnkgKGByIDEwMCAqIChyMi41YSRlc3RpbWF0ZVsxXSAlPiUgcm91bmQoMikpYCUpIHRoYW4gdGhleSBkaWQgZm9yIHF1ZXN0aW9ucyBpbiB0aGUgZmFjdCBjYXRlZ29yeSAoYHIgMTAwICogKHIyLjVhJGVzdGltYXRlWzJdICU+JSByb3VuZCgyKSlgJSkqKi4KCiMjIyBDb21wYXJpbmcgcXVlc3Rpb24gY2F0ZWdvcmllcyB3aXRoaW4gY291bnRyaWVzL2xhbmd1YWdlcwoKYGBge3IsIGVjaG8gPSBUfQojIFVTCnIyLjViX3VzIDwtIHQudGVzdChwcm9wX2JlbGlldmVYIH4gc3VwZXJfY2F0LCBwYWlyZWQgPSBULAogICAgICAgICAgICAgICAgICAgZDJfYW5vdmEgJT4lIGZpbHRlcihjb3VudHJ5ID09ICJVUyIpKTsgcjIuNWJfdXMKCiMgR2hhbmEKcjIuNWJfZ2ggPC0gdC50ZXN0KHByb3BfYmVsaWV2ZVggfiBzdXBlcl9jYXQsIHBhaXJlZCA9IFQsCiAgICAgICAgICAgICAgICAgICBkMl9hbm92YSAlPiUgZmlsdGVyKGNvdW50cnkgPT0gIkdoYW5hIikpOyByMi41Yl9naAoKCiMgVGhhaWxhbmQKcjIuNWJfdGggPC0gdC50ZXN0KHByb3BfYmVsaWV2ZVggfiBzdXBlcl9jYXQsIHBhaXJlZCA9IFQsCiAgICAgICAgICAgICAgICAgICBkMl9hbm92YSAlPiUgZmlsdGVyKGNvdW50cnkgPT0gIlRoYWlsYW5kIikpOyByMi41Yl90aAoKIyBDaGluYQpyMi41Yl9jaCA8LSB0LnRlc3QocHJvcF9iZWxpZXZlWCB+IHN1cGVyX2NhdCwgcGFpcmVkID0gVCwKICAgICAgICAgICAgICAgICAgIGQyX2Fub3ZhICU+JSBmaWx0ZXIoY291bnRyeSA9PSAiQ2hpbmEiKSk7IHIyLjViX2NoCgojIFZhbnVhdHUKcjIuNWJfdnQgPC0gdC50ZXN0KHByb3BfYmVsaWV2ZVggfiBzdXBlcl9jYXQsIHBhaXJlZCA9IFQsCiAgICAgICAgICAgICAgICAgICBkMl9hbm92YSAlPiUgZmlsdGVyKGNvdW50cnkgPT0gIlZhbnVhdHUiKSk7IHIyLjViX3Z0CmBgYAoKKipUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHF1ZXN0aW9uIGNhdGVnb3JpZXMgd2FzIHNpZ25pZmljYW50IGluIGVhY2ggY291bnRyeS9sYW5ndWFnZSBjb25zaWRlcmVkIGFsb25lLioqCgoKIyBGcmVlIHJlc3BvbnNlIGRhdGEKCkhlcmUncyBhIHZlcnkgcXVpY2sgcGFzcyBhdCBsb29raW5nIGF0IHRoZSBtb3N0IGNvbW1vbiB3b3Jkcy9waHJhc2VzIGluIHRoZXNlIGZyZWUgcmVzcG9uc2VzIC0tIEkgZGlkIGEgcXVpY2sgYW5kIGRpcnR5ICJzdGVtbWluZyIgKGNvbnZlcnRpbmcsIGUuZy4sICJiZWxpZXZlIiBhbmQgImJlbGlldmVzIiBhbmQgImJlbGlldmVkIiBhbGwgdG8gdGhlIHN0ZW0gImJlbGlldiIpIGJ1dCB3ZSBjb3VsZCBsb29rIGludG8gZG9pbmcgc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZC4gSGVyZSBhcmUgdGhlIHRvcCA1IHN0ZW1zIGZvciBlYWNoIHF1ZXN0aW9uIGNhdGVnb3J5LCBieSBjb3VudHJ5OiAKCmBgYHtyLCBpbmNsdWRlID0gRn0KZDJfbG9uZyAlPiUKICBjb3VudChjb3VudHJ5LCBzdXBlcl9jYXQsIGNhdGVnb3J5LCByZXNwb25zZV9sZW1tYTIpICU+JQogIGFycmFuZ2UoY291bnRyeSwgc3VwZXJfY2F0LCBjYXRlZ29yeSwgZGVzYyhuKSkKYGBgCgpgYGB7cn0KZDJfbG9uZyAlPiUKICBjb3VudChjb3VudHJ5LCBzdXBlcl9jYXQsIGNhdGVnb3J5LCByZXNwb25zZV9sZW1tYTIpICU+JQogIGFycmFuZ2UoY291bnRyeSwgc3VwZXJfY2F0LCBjYXRlZ29yeSwgZGVzYyhuKSkgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSwgc3VwZXJfY2F0LCBjYXRlZ29yeSkgJT4lCiAgbXV0YXRlKHBlcmNlbnQgPSBwYXN0ZTAocm91bmQobi9zdW0obiksIDIpICogMTAwLCAiJSIpKSAlPiUKICB0b3Bfbig1LCBuKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KGNvdW50cnksIHN1cGVyX2NhdCwgY2F0ZWdvcnksIHJlc3BvbnNlX2xlbW1hMiwgcGVyY2VudCwgbikgJT4lCiAga2FibGUoKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgY29sbGFwc2Vfcm93cygxOjMpCmBgYAoKSSB0aGluayB0aGVyZSdzIGxvdHMgdG8gZGlzY3VzcyBoZXJlIC0tIGUuZy4sIHRoZSBjb21tb24gdXNlIG9mICJrbm93IiAod2hpY2ggSSB0aGluayBpcyBhbHJlYWR5IG9mIGludGVyZXN0KS4gQWxzbywgdGhlIEJpc2xhbWEgZGF0YSBhcHBlYXJzIHRvIGJlIGluIEJpc2xhbWEgKG5vdCB0cmFuc2xhdGVkKSAtLSBJJ3ZlIGluY2x1ZGVkICJiaWxpZiIgKGFuZCBzcGVsbGluZyB2YXJpYW50cykgYXMgImJlbGlldmUiIGFuZCAidGluZyIgKGFzIHNwZWxsaW5nIHZhcmlhbnRzKSBhcyAidGhpbmsiIGluIGFsbCBvZiB0aGUgZm9yZWdvaW5nIGFuYWx5c2VzLgoKYGBge3J9CnRvcF93b3JkcyA8LSBkMl9sb25nICU+JQogIGNvdW50KGNvdW50cnksIHJlc3BvbnNlX2xlbW1hMikgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuKSkgJT4lCiAgdG9wX24oNiwgcHJvcCkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdyb3VwX2J5KHJlc3BvbnNlX2xlbW1hMikgJT4lCiAgc3VtbWFyaXNlKG4gPSBzdW0obiksCiAgICAgICAgICAgIHByb3AgPSBzdW0ocHJvcCkvNSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGFycmFuZ2UoZGVzYyhwcm9wKSkgJT4lCiAgbXV0YXRlKG9yZGVyID0gMTpucm93KC4pKQpgYGAKCmBgYHtyfQpmb3VyX2NvbHMgPC0gYygiZ3JheSIsICJraGFraSIsIGdnX2NvbG9yX2h1ZSgyKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNywgZmlnLmFzcCA9IDAuNX0KZDJfbG9uZyAlPiUKICBmaWx0ZXIocmVzcG9uc2VfbGVtbWEyICVpbiUgdG9wX3dvcmRzJHJlc3BvbnNlX2xlbW1hMikgJT4lCiAgY291bnQoY291bnRyeSwgc3VwZXJfY2F0LCAjY2F0ZWdvcnksIAogICAgICAgIHJlc3BvbnNlX2xlbW1hMikgJT4lCiAgY29tcGxldGUocmVzcG9uc2VfbGVtbWEyLCBuZXN0aW5nKGNvdW50cnksIHN1cGVyX2NhdCksIGZpbGwgPSBsaXN0KG4gPSAwKSkgJT4lCiAgYXJyYW5nZShzdXBlcl9jYXQsICNjYXRlZ29yeSwgCiAgICAgICAgICBjb3VudHJ5LCBkZXNjKG4pKSAlPiUKICBncm91cF9ieShjb3VudHJ5LCBzdXBlcl9jYXQpICU+JSAjLCBjYXRlZ29yeSkgJT4lCiAgbXV0YXRlKHByb3BvcnRpb24gPSByb3VuZChuL3N1bShuKSwgMikpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUocmVzcG9uc2VfbGVtbWEyID0gcmVvcmRlcihyZXNwb25zZV9sZW1tYTIsIGRlc2MobikpLAogICAgICAgICByZXNwb25zZV9jb2xvciA9IGNhc2Vfd2hlbihyZXNwb25zZV9sZW1tYTIgPT0gInRoaW5rIiB+ICJ0aGluayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlX2xlbW1hMiA9PSAiYmVsaWV2ZSIgfiAiYmVsaWV2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlX2xlbW1hMiA9PSAia25vdyIgfiAia25vdyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiAib3RoZXIiKSwKICAgICAgICAgcmVzcG9uc2VfY29sb3IgPSBmYWN0b3IocmVzcG9uc2VfY29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIm90aGVyIiwgImtub3ciLCAidGhpbmsiLCAiYmVsaWV2ZSIpKSkgJT4lCiAgbGVmdF9qb2luKHRvcF93b3JkcyAlPiUgc2VsZWN0KHJlc3BvbnNlX2xlbW1hMiwgb3JkZXIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSByZW9yZGVyKHJlc3BvbnNlX2xlbW1hMiwgb3JkZXIpLCAKICAgICAgICAgICAgIHkgPSBwcm9wb3J0aW9uLCBmaWxsID0gcmVzcG9uc2VfY29sb3IpKSArCiAgZmFjZXRfZ3JpZChzdXBlcl9jYXQgfiBjb3VudHJ5KSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBmb3VyX2NvbHMpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKICBsYWJzKHggPSAicmVzcG9uc2UiLCB5ID0gInByb3BvcnRpb24iLCBmaWxsID0gInJlc3BvbnNlIHR5cGUiKQpgYGAKCmBgYHtyfQp3cml0ZV9jc3YoZDJfbG9uZywgIi4uL2RhdGEvdGhpbmtiZWxpZXZlMl9mcmVlcmVzcG9uc2Vfa3cuY3N2IikKYGBgCgoKIyBBbmFseXNpczogUmVsaWdpb24gYW5kIHJlbGlnaW9zaXR5CgojIyBEZW1vZ3JhcGhpY3MKCkZpcnN0LCBsZXQncyBqdXN0IGxvb2sgYXQgaG93IHBlb3BsZSBpbiBkaWZmZXJlbnQgY291bnRyaWVzIHJlcGxpZWQgdG8gdGhlIHJlbGV2YW50IHF1ZXN0aW9ucy4gCgojIyMgYHRoYjJfZGVtb19yZWdwYDogIkFyZSB5b3UgYSBwYXJ0IG9mIGFueSByZWxpZ2lvdXMgZ3JvdXA/IgoKYGBge3J9CmQyICU+JSAKICBsZWZ0X2pvaW4oc2FtcGxlX3NpemVfZDIpICU+JQogIGdncGxvdChhZXMoeCA9IGNvdW50cnlfbiwgCiAgICAgICAgICAgICAjIHB1dCBOQXMgb24gdG9wIG9mIGJhcgogICAgICAgICAgICAgZmlsbCA9IGZhY3Rvcih0aGIyX2RlbW9fcmVncCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYyhOQSwgIk5PIiwgIllFUyIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZSA9IE5VTEwpKSkgKwogIGdlb21fYmFyKCkgKwogIGxhYnMoeCA9ICJjb3VudHJ5IiwgeSA9ICJwcm9wb3J0aW9uIiwgCiAgICAgICBmaWxsID0gIkFyZSB5b3UgYSBwYXJ0IG9mIGFueSByZWxpZ2lvdXMgZ3JvdXA/IikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKQpgYGAKCiMjIyBgdGhiMl9kZW1vX3JlbHlgOiAiRnJvbSAxIHRvIDcsIGhvdyByZWxpZ2lvdXMgYXJlIHlvdT8gKDEgPSBub3QgcmVsaWdpb3VzIGF0IGFsbCwgNyA9CmV4dHJlbWVseSByZWxpZ2lvdXMpIgoKU2VlbXMgdG8gaGF2ZSBiZWVuIG9taXR0ZWQgaW4gVGhhaWxhbmQ/CgpgYGB7cn0KZDIgJT4lIAogIGxlZnRfam9pbihzYW1wbGVfc2l6ZV9kMikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYXMubnVtZXJpYyh0aGIyX2RlbW9fcmVseSkpKSArCiAgZmFjZXRfZ3JpZCh+IGNvdW50cnlfbikgKwogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSAxOjcsIG1pbm9yX2JyZWFrcyA9IE5VTEwpICsKICBsYWJzKHggPSAiRnJvbSAxIHRvIDcsIGhvdyByZWxpZ2lvdXMgYXJlIHlvdT8iLCAKICAgICAgIHkgPSAiY291bnQiKQpgYGAKCiMjIyBgdGhiMl9kZW1vX2ltcHJgOiAiRnJvbSAxIHRvIDcsIGhvdyBpbXBvcnRhbnQgdG8geW91IGlzIHlvdXIgcmVsaWdpb3VzIHByYWN0aWNlPyAgKDEgPSBub3QgaW1wb3J0YW50IGF0IGFsbCwgNyA9IG9mIHV0bW9zdCBpbXBvcnRhbmNlKSIKClNlZW1zIHRvIGhhdmUgYmVlbiBvbWl0dGVkIGluIFRoYWlsYW5kPwoKYGBge3J9CmQyICU+JSAKICBsZWZ0X2pvaW4oc2FtcGxlX3NpemVfZDIpICU+JQogIGdncGxvdChhZXMoeCA9IGFzLm51bWVyaWModGhiMl9kZW1vX2ltcHIpKSkgKwogIGZhY2V0X2dyaWQofiBjb3VudHJ5X24pICsKICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDEpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gMTo3LCBtaW5vcl9icmVha3MgPSBOVUxMKSArCiAgbGFicyh4ID0gIkZyb20gMSB0byA3LCBob3cgaW1wb3J0YW50IHRvIHlvdSBpcyB5b3VyIHJlbGlnaW91cyBwcmFjdGljZT8iLCAKICAgICAgIHkgPSAiY291bnQiKQpgYGAKCiMjIyBgdGhiMl9kZW1vX3dvcnNgOiAiSG93IG9mdGVuIGRvIHlvdSBhdHRlbmQgcGxhY2VzIG9mIHdvcnNoaXA/IgoKYGBge3J9CmQyICU+JSAKICBsZWZ0X2pvaW4oc2FtcGxlX3NpemVfZDIpICU+JQogIGdncGxvdChhZXMoeCA9IHRoYjJfZGVtb193b3JzKSkgKwogIGZhY2V0X2dyaWQofiBjb3VudHJ5X24pICsKICBnZW9tX2JhcigpICsKICBsYWJzKHggPSAiSG93IG9mdGVuIGRvIHlvdSBhdHRlbmQgcGxhY2VzIG9mIHdvcnNoaXA/IiwgCiAgICAgICB5ID0gImNvdW50IikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkKYGBgCgojIyMgYHRoYjJfZGVtb19iZ29kYDogIldoYXQgYmVzdCBkZXNjcmliZXMgeW91ciBsZXZlbCBvZiBiZWxpZWYgaW4gR29kPyIKCmBgYHtyfQpkMiAlPiUgCiAgbGVmdF9qb2luKHNhbXBsZV9zaXplX2QyKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB0aGIyX2RlbW9fYmdvZCkpICsKICBmYWNldF9ncmlkKH4gY291bnRyeV9uKSArCiAgZ2VvbV9iYXIoKSArCiAgbGFicyh4ID0gIldoYXQgYmVzdCBkZXNjcmliZXMgeW91ciBsZXZlbCBvZiBiZWxpZWYgaW4gR29kPyIsIAogICAgICAgeSA9ICJjb3VudCIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpCmBgYAoKIyMjIGB0aGIyX2RlbW9fYmJ1aGA6ICJXaGF0IGJlc3QgZGVzY3JpYmVzIHlvdXIgbGV2ZWwgb2YgYmVsaWVmIGluIEJ1ZGRoYT8iCgpgYGB7cn0KZDIgJT4lIAogIGxlZnRfam9pbihzYW1wbGVfc2l6ZV9kMikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdGhiMl9kZW1vX2JidWgpKSArCiAgZmFjZXRfZ3JpZCh+IGNvdW50cnlfbikgKwogIGdlb21fYmFyKCkgKwogIGxhYnMoeCA9ICJXaGF0IGJlc3QgZGVzY3JpYmVzIHlvdXIgbGV2ZWwgb2YgYmVsaWVmIGluIEJ1ZGRoYT8iLCAKICAgICAgIHkgPSAiY291bnQiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKQpgYGAKCiMjIyBgdGhiMl9kZW1vX2Jvc3BgOiAiV2hhdCBiZXN0IGRlc2NyaWJlcyB5b3VyIGxldmVsIG9mIGJlbGllZiBpbiBhbm90aGVyIHNwaXJpdHVhbCBiZWluZyAob3RoZXIgdGhhbiBHb2Qgb3IgQnVkZGhhKT8iCgpgYGB7cn0KZDIgJT4lIAogIGxlZnRfam9pbihzYW1wbGVfc2l6ZV9kMikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdGhiMl9kZW1vX2Jvc3ApKSArCiAgZmFjZXRfZ3JpZCh+IGNvdW50cnlfbikgKwogIGdlb21fYmFyKCkgKwogIGxhYnMoeCA9ICJXaGF0IGJlc3QgZGVzY3JpYmVzIHlvdXIgbGV2ZWwgb2YgYmVsaWVmIGluIGFub3RoZXIgc3Bpcml0dWFsIGJlaW5nIChvdGhlciB0aGFuIEdvZCBvciBCdWRkaGEpPyIsIAogICAgICAgeSA9ICJjb3VudCIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpCmBgYAoKIyMjIGB0aGIyX2RlbW9fYXRzbmA6ICJXaGF0IGJlc3QgZGVzY3JpYmVzIHlvdXIgYXR0aXR1ZGUgdG93YXJkcyB0aGUgc3VwZXJuYXR1cmFsPwoKYGBge3IsIGZpZy53aWR0aCA9IDMuNSwgZmlnLmFzcCA9IDAuOH0KZDIgJT4lIAogIGxlZnRfam9pbihzYW1wbGVfc2l6ZV9kMikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdGhiMl9kZW1vX2F0c24pKSArCiAgZmFjZXRfZ3JpZCh+IGNvdW50cnlfbikgKwogIGdlb21fYmFyKCkgKwogIGxhYnMoeCA9ICJXaGF0IGJlc3QgZGVzY3JpYmVzIHlvdXIgYXR0aXR1ZGUgdG93YXJkcyB0aGUgc3VwZXJuYXR1cmFsPyIsIAogICAgICAgeSA9ICJjb3VudCIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpCmBgYAoKIyMjIGB0aGIyX2RlbW9faW1zbmA6ICJGcm9tIDEgdG8gNywgaG93IGltcG9ydGFudCB0byB5b3UgaXMgeW91ciBhdHRpdHVkZSB0b3dhcmQgdGhlIHN1cGVybmF0dXJhbD8gKDEgPSBub3QgaW1wb3J0YW50IGF0IGFsbCwgNyA9IG9mIHV0bW9zdCBpbXBvcnRhbmNlKSIKCmBgYHtyfQpkMiAlPiUgCiAgbGVmdF9qb2luKHNhbXBsZV9zaXplX2QyKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhcy5udW1lcmljKHRoYjJfZGVtb19pbXNuKSkpICsKICBmYWNldF9ncmlkKH4gY291bnRyeV9uKSArCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IDE6NywgbWlub3JfYnJlYWtzID0gTlVMTCkgKwogIGxhYnMoeCA9ICJGcm9tIDEgdG8gNywgaG93IGltcG9ydGFudCB0byB5b3UgaXMgeW91ciBhdHRpdHVkZSB0b3dhcmQgdGhlIHN1cGVybmF0dXJhbD8iLCAKICAgICAgIHkgPSAiY291bnQiKQpgYGAKCiMjIEFuYWx5c2VzCgpOb3csIGxldCdzIGxvb2sgYXQgaG93IHJlc3BvbnNlcyB0byBvdXIgdGhpbmsvYmVsaWV2ZSBxdWVzdGlvbnMgbWlnaHQgaGF2ZSB2YXJpZWQgZGVwZW5kaW5nIG9uIHJlbGlnaW9zaXR5L2V0Yy4gRm9yIG5vdywgSSdsbCBqdXN0IGZvY3VzIG9uIGEgY291cGxlIG9mIHZhcmlhYmxlcyB0aGF0IHNlZW0gdG8gaGF2ZSBiZWVuIGFuc3dlcmVkIGluIHJlYXNvbmFibGUgd2F5cy4KCiMjIyBgdGhiMl9kZW1vX3JlbHlgOiDigJxGcm9tIDEgdG8gNywgaG93IHJlbGlnaW91cyBhcmUgeW91PyAoMSA9IG5vdCByZWxpZ2lvdXMgYXQgYWxsLCA3ID0gZXh0cmVtZWx5IHJlbGlnaW91cynigJ0KCmBgYHtyLCBlY2hvID0gVH0KcjIuNiA8LSBsbWVyKGJlbGlldmUgfiBzdXBlcl9jYXQgKiBjb3VudHJ5ICogdGhiMl9kZW1vX3JlbHlfbnVtCiAgICAgICAgICAgICArICgxICsgc3VwZXJfY2F0IHwgdGhiMl9zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgZGF0YSA9IGQyX2xvbmcgJT4lIAogICAgICAgICAgICAgICBmaWx0ZXIoY291bnRyeSAhPSAiVGhhaWxhbmQiKSAlPiUKICAgICAgICAgICAgICAgbXV0YXRlKHRoYjJfZGVtb19yZWx5X251bSA9IHNjYWxlKHRoYjJfZGVtb19yZWx5X251bSkpLAogICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChjb3VudHJ5ID0gImNvbnRyLnN1bSIpKQpgYGAKCmBgYHtyfQpyZWd0YWJfZnVuKHIyLjYsIHN0ZF9iZXRhID0gVCwgCiAgICAgICAgICAgY291bnRyeV92YXIxID0gImNvdW50cnkxIiwgY291bnRyeV9uYW1lMSA9ICJDb3VudHJ5IChVUykiLAogICAgICAgICAgIGNvdW50cnlfdmFyMiA9ICJjb3VudHJ5MiIsIGNvdW50cnlfbmFtZTIgPSAiQ291bnRyeSAoR2hhbmEpIiwKICAgICAgICAgICBjb3VudHJ5X3ZhcjMgPSAiY291bnRyeTMiLCBjb3VudHJ5X25hbWUzID0gIkNvdW50cnkgKENoaW5hKSIsCiAgICAgICAgICAgcHJlZGljdG9yX3ZhcjEgPSAidGhiMl9kZW1vX3JlbHlfbnVtIiwgCiAgICAgICAgICAgcHJlZGljdG9yX25hbWUxID0gIkhvdyByZWxpZ2lvdXMgYXJlIHlvdT8iKSAlPiUgCiAgcmVndGFiX3N0eWxlX2Z1bihyb3dfZW1waCA9IGMoMTAsIDE0OjE2KSkKYGBgCgpUaGlzIGFuYWx5c2lzIHN1Z2dlc3RzIHRoYXQgZ3JlYXRlciByZWxpZ2lvc2l0eSB3YXMgTk9UIGFzc29jaWF0ZWQgd2l0aCBhbiBpbmNyZWFzZWQgZGlzdGluY3Rpb24gYmV0d2VlbiByZWxpZ2lvdXMgYW5kIGZhY3QgcXVlc3Rpb25zLiAoTm90ZSB0aGF0IHRoaXMgYW5hbHlzaXMgb21pdHMgcGFydGljaXBhbnRzIGZyb20gVGhhaWxhbmQsIHdobyBkaWQgbm90IGFuc3dlciB0aGlzIHF1ZXN0aW9uIGFib3V0IHJlbGlnaW9zaXR5LikKCmBgYHtyfQpkMl9sb25nICU+JSAKICBmaWx0ZXIoY291bnRyeSAhPSAiVGhhaWxhbmQiKSAlPiUKICBncm91cF9ieShjb3VudHJ5LCB0aGIyX3N1YmosIHRoYjJfZGVtb19yZWx5X251bSwgc3VwZXJfY2F0KSAlPiUKICBzdW1tYXJpc2UoYmVsaWV2ZV9wcm9wID0gbWVhbihiZWxpZXZlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdGhiMl9kZW1vX3JlbHlfbnVtLCB5ID0gYmVsaWV2ZV9wcm9wLCBjb2xvciA9IHN1cGVyX2NhdCkpICsKICBmYWNldF9ncmlkKC4gfiBjb3VudHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjIsIHdpZHRoID0gMC4xLCBoZWlnaHQgPSAwLjAyKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSAwOjYsIGxhYmVscyA9IGxldmVscyhkMiR0aGIyX2RlbW9fcmVseSkpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogIGxhYnMoeCA9ICJIb3cgcmVsaWdpb3VzIGFyZSB5b3U/IiwgeSA9ICJQcm9wb3J0aW9uICdiZWxpZXZlJyByZXNwb25zZXMiLAogICAgICAgY29sb3IgPSAiQ2F0ZWdvcnkiKQpgYGAKCmBgYHtyfQpkMl9sb25nICU+JSAKICBmaWx0ZXIoY291bnRyeSAhPSAiVGhhaWxhbmQiKSAlPiUKICBncm91cF9ieShjb3VudHJ5LCB0aGIyX3N1YmosIHRoYjJfZGVtb19yZWx5X251bSwgc3VwZXJfY2F0KSAlPiUKICBzdW1tYXJpc2UoYmVsaWV2ZV9wcm9wID0gbWVhbihiZWxpZXZlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc3ByZWFkKHN1cGVyX2NhdCwgYmVsaWV2ZV9wcm9wKSAlPiUKICBtdXRhdGUoZGlmZiA9IHJlbGlnaW91cyAtIGZhY3QpICU+JQogIGdncGxvdChhZXMoeCA9IHRoYjJfZGVtb19yZWx5X251bSwgeSA9IGRpZmYpKSArCiAgZmFjZXRfZ3JpZCguIH4gY291bnRyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yLCB3aWR0aCA9IDAuMSwgaGVpZ2h0ID0gMC4wMikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gMDo2LCBsYWJlbHMgPSBsZXZlbHMoZDIkdGhiMl9kZW1vX3JlbHkpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKICBsYWJzKHggPSAiSG93IHJlbGlnaW91cyBhcmUgeW91PyIsIAogICAgICAgeSA9ICJEaWZmZXJlbmNlIGluIHByb3BvcnRpb24gJ2JlbGlldmUnIHJlc3BvbnNlc1xuKHJlbGlnaW91cyBxdWVzdGlvbnMgLSBmYWN0IHF1ZXN0aW9ucykiLAogICAgICAgY29sb3IgPSAiQ2F0ZWdvcnkiKQpgYGAKCiMjIyBgdGhiMl9kZW1vX2ltcHJgOiAiRnJvbSAxIHRvIDcsIGhvdyBpbXBvcnRhbnQgdG8geW91IGlzIHlvdXIgcmVsaWdpb3VzIHByYWN0aWNlPyAgKDEgPSBub3QgaW1wb3J0YW50IGF0IGFsbCwgNyA9IG9mIHV0bW9zdCBpbXBvcnRhbmNlKSIKCmBgYHtyLCBlY2hvID0gVH0KcjIuNyA8LSBsbWVyKGJlbGlldmUgfiBzdXBlcl9jYXQgKiBjb3VudHJ5ICogdGhiMl9kZW1vX2ltcHJfbnVtCiAgICAgICAgICAgICArICgxICsgc3VwZXJfY2F0IHwgdGhiMl9zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgZGF0YSA9IGQyX2xvbmcgJT4lIAogICAgICAgICAgICAgICBmaWx0ZXIoY291bnRyeSAhPSAiVGhhaWxhbmQiKSAlPiUKICAgICAgICAgICAgICAgbXV0YXRlKHRoYjJfZGVtb19pbXByX251bSA9IHNjYWxlKHRoYjJfZGVtb19pbXByX251bSkpLAogICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChjb3VudHJ5ID0gImNvbnRyLnN1bSIpKQpgYGAKCmBgYHtyfQpyZWd0YWJfZnVuKHIyLjcsIHN0ZF9iZXRhID0gVCwgCiAgICAgICAgICAgY291bnRyeV92YXIxID0gImNvdW50cnkxIiwgY291bnRyeV9uYW1lMSA9ICJDb3VudHJ5IChVUykiLAogICAgICAgICAgIGNvdW50cnlfdmFyMiA9ICJjb3VudHJ5MiIsIGNvdW50cnlfbmFtZTIgPSAiQ291bnRyeSAoR2hhbmEpIiwKICAgICAgICAgICBjb3VudHJ5X3ZhcjMgPSAiY291bnRyeTMiLCBjb3VudHJ5X25hbWUzID0gIkNvdW50cnkgKENoaW5hKSIsCiAgICAgICAgICAgcHJlZGljdG9yX3ZhcjEgPSAidGhiMl9kZW1vX2ltcHJfbnVtIiwgCiAgICAgICAgICAgcHJlZGljdG9yX25hbWUxID0gIkhvdyBpbXBvcnRhbnQgaXMgeW91ciByZWxpZ2lvdXMgcHJhY3RpY2U/IikgJT4lIAogIHJlZ3RhYl9zdHlsZV9mdW4ocm93X2VtcGggPSBjKDEwLCAxNDoxNikpCmBgYAoKVGhpcyBhbmFseXNpcyBzdWdnZXN0cyB0aGF0IG1vcmUgaW1wb3J0YW5jZSBwbGFjZWQgb24gcmVsaWdpb3VzIHByYWN0aWNlIHdhcyBOT1QgYXNzb2NpYXRlZCB3aXRoIGFuIGluY3JlYXNlZCBkaXN0aW5jdGlvbiBiZXR3ZWVuIHJlbGlnaW91cyBhbmQgZmFjdCBxdWVzdGlvbnMuIChOb3RlIHRoYXQgdGhpcyBhbmFseXNpcyBvbWl0cyBwYXJ0aWNpcGFudHMgZnJvbSBUaGFpbGFuZCwgd2hvIGRpZCBub3QgYW5zd2VyIHRoaXMgcXVlc3Rpb24gYWJvdXQgcmVsaWdpb3NpdHkuKQoKYGBge3J9CmQyX2xvbmcgJT4lIAogIGZpbHRlcihjb3VudHJ5ICE9ICJUaGFpbGFuZCIpICU+JQogIGdyb3VwX2J5KGNvdW50cnksIHRoYjJfc3ViaiwgdGhiMl9kZW1vX2ltcHJfbnVtLCBzdXBlcl9jYXQpICU+JQogIHN1bW1hcmlzZShiZWxpZXZlX3Byb3AgPSBtZWFuKGJlbGlldmUsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB0aGIyX2RlbW9faW1wcl9udW0sIHkgPSBiZWxpZXZlX3Byb3AsIGNvbG9yID0gc3VwZXJfY2F0KSkgKwogIGZhY2V0X2dyaWQoLiB+IGNvdW50cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMiwgd2lkdGggPSAwLjEsIGhlaWdodCA9IDAuMDIpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IDA6NiwgbGFiZWxzID0gbGV2ZWxzKGQyJHRoYjJfZGVtb19pbXByKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSArCiAgbGFicyh4ID0gIkhvdyBpbXBvcnRhbnQgaXMgeW91ciByZWxpZ2lvdXMgcHJhY3RpY2U/IiwgeSA9ICJQcm9wb3J0aW9uICdiZWxpZXZlJyByZXNwb25zZXMiLAogICAgICAgY29sb3IgPSAiQ2F0ZWdvcnkiKQpgYGAKCmBgYHtyfQpkMl9sb25nICU+JSAKICBmaWx0ZXIoY291bnRyeSAhPSAiVGhhaWxhbmQiKSAlPiUKICBncm91cF9ieShjb3VudHJ5LCB0aGIyX3N1YmosIHRoYjJfZGVtb19pbXByX251bSwgc3VwZXJfY2F0KSAlPiUKICBzdW1tYXJpc2UoYmVsaWV2ZV9wcm9wID0gbWVhbihiZWxpZXZlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc3ByZWFkKHN1cGVyX2NhdCwgYmVsaWV2ZV9wcm9wKSAlPiUKICBtdXRhdGUoZGlmZiA9IHJlbGlnaW91cyAtIGZhY3QpICU+JQogIGdncGxvdChhZXMoeCA9IHRoYjJfZGVtb19pbXByX251bSwgeSA9IGRpZmYpKSArCiAgZmFjZXRfZ3JpZCguIH4gY291bnRyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yLCB3aWR0aCA9IDAuMSwgaGVpZ2h0ID0gMC4wMikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gMDo2LCBsYWJlbHMgPSBsZXZlbHMoZDIkdGhiMl9kZW1vX2ltcHIpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKICBsYWJzKHggPSAiSG93IGltcG9ydGFudCBpcyB5b3VyIHJlbGlnaW91cyBwcmFjdGljZT8iLCAKICAgICAgIHkgPSAiRGlmZmVyZW5jZSBpbiBwcm9wb3J0aW9uICdiZWxpZXZlJyByZXNwb25zZXNcbihyZWxpZ2lvdXMgcXVlc3Rpb25zIC0gZmFjdCBxdWVzdGlvbnMpIiwKICAgICAgIGNvbG9yID0gIkNhdGVnb3J5IikKYGBgCgojIyMgYHRoYjJfZGVtb3dvcnNgOiAiSG93IG9mdGVuIGRvIHlvdSBhdHRlbmQgcGxhY2VzIG9mIHdvcnNoaXA/IgoKYGBge3IsIGVjaG8gPSBUfQpyMi44IDwtIGxtZXIoYmVsaWV2ZSB+IHN1cGVyX2NhdCAqIGNvdW50cnkgKiB0aGIyX2RlbW9fd29yc19udW0KICAgICAgICAgICAgICsgKDEgKyBzdXBlcl9jYXQgfCB0aGIyX3N1YmopICsgKDEgfCBxdWVzdGlvbiksCiAgICAgICAgICAgICBkYXRhID0gZDJfbG9uZyAlPiUgCiAgICAgICAgICAgICAgIG11dGF0ZSh0aGIyX2RlbW9fd29yc19udW0gPSBzY2FsZSh0aGIyX2RlbW9fd29yc19udW0pKSkKYGBgCgpgYGB7cn0KcmVndGFiX2Z1bihyMi44LCBzdGRfYmV0YSA9IFQsIAogICAgICAgICAgIHByZWRpY3Rvcl92YXIxID0gInRoYjJfZGVtb193b3JzX251bSIsIAogICAgICAgICAgIHByZWRpY3Rvcl9uYW1lMSA9ICJIb3cgb2Z0ZW4gZG8geW91IGF0dGVuZCBwbGFjZXMgb2Ygd29yc2hpcD8iKSAlPiUgCiAgcmVndGFiX3N0eWxlX2Z1bihyb3dfZW1waCA9IGMoMTIsIDE3OjIwKSkKYGBgCgpUaGlzIGFuYWx5c2lzIHN1Z2dlc3RzIHRoYXQgZnJlcXVlbmN5IG9mIGF0dGVuZGVuY2Ugd2FzIE5PVCBhc3NvY2lhdGVkIHdpdGggYW4gaW5jcmVhc2VkIGRpc3RpbmN0aW9uIGJldHdlZW4gcmVsaWdpb3VzIGFuZCBmYWN0IHF1ZXN0aW9ucy4gCgpgYGB7cn0KZDJfbG9uZyAlPiUgCiAgZ3JvdXBfYnkoY291bnRyeSwgdGhiMl9zdWJqLCB0aGIyX2RlbW9fd29yc19udW0sIHN1cGVyX2NhdCkgJT4lCiAgc3VtbWFyaXNlKGJlbGlldmVfcHJvcCA9IG1lYW4oYmVsaWV2ZSwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdncGxvdChhZXMoeCA9IHRoYjJfZGVtb193b3JzX251bSwgeSA9IGJlbGlldmVfcHJvcCwgY29sb3IgPSBzdXBlcl9jYXQpKSArCiAgZmFjZXRfZ3JpZCguIH4gY291bnRyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yLCB3aWR0aCA9IDAuMSwgaGVpZ2h0ID0gMC4wMikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gMDo0LCBsYWJlbHMgPSBsZXZlbHMoZDIkdGhiMl9kZW1vX3dvcnMpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIsCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh4ID0gIkhvdyBvZnRlbiBkbyB5b3UgYXR0ZW5kIHBsYWNlcyBvZiB3b3JzaGlwPyIsIAogICAgICAgeSA9ICJQcm9wb3J0aW9uICdiZWxpZXZlJyByZXNwb25zZXMiLAogICAgICAgY29sb3IgPSAiQ2F0ZWdvcnkiKQpgYGAKCmBgYHtyfQpkMl9sb25nICU+JSAKICBncm91cF9ieShjb3VudHJ5LCB0aGIyX3N1YmosIHRoYjJfZGVtb193b3JzX251bSwgc3VwZXJfY2F0KSAlPiUKICBzdW1tYXJpc2UoYmVsaWV2ZV9wcm9wID0gbWVhbihiZWxpZXZlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc3ByZWFkKHN1cGVyX2NhdCwgYmVsaWV2ZV9wcm9wKSAlPiUKICBtdXRhdGUoZGlmZiA9IHJlbGlnaW91cyAtIGZhY3QpICU+JQogIGdncGxvdChhZXMoeCA9IHRoYjJfZGVtb193b3JzX251bSwgeSA9IGRpZmYpKSArCiAgZmFjZXRfZ3JpZCguIH4gY291bnRyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yLCB3aWR0aCA9IDAuMSwgaGVpZ2h0ID0gMC4wMikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gMDo0LCBsYWJlbHMgPSBsZXZlbHMoZDIkdGhiMl9kZW1vX3dvcnMpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIsCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh4ID0gIkhvdyBvZnRlbiBkbyB5b3UgYXR0ZW5kIHBsYWNlcyBvZiB3b3JzaGlwPyIsIAogICAgICAgeSA9ICJEaWZmZXJlbmNlIGluIHByb3BvcnRpb24gJ2JlbGlldmUnIHJlc3BvbnNlc1xuKHJlbGlnaW91cyBxdWVzdGlvbnMgLSBmYWN0IHF1ZXN0aW9ucykiLAogICAgICAgY29sb3IgPSAiQ2F0ZWdvcnkiKQpgYGAKCgoKCgo=